目录
一、单一执行的例行性任务--at(一 次性)
1、安装
2、启动服务
3、at命令详解
1)格式
2)参数
3)时间格式
4、实例
二、循环执行的例行性任务-- crontab(周期性)
1、crontd服务
2、工作过程
3、crontab命令详解
编辑crontab
书写定时任务的注意事项
系统级别的计划任务
查看账户信息的三种路径
Linux中单引号、双引号及反引号的区别
一、单一执行的例行性任务--at(一 次性)
1、安装
[root@server ~]# yum install at -y
[root@server ~]# at -V # 大写V
at version 3.2.2
[root@server ~]# which at # 查看路径
/usr/bin/at
2、启动服务
[root@server ~]# systemctl start atd
[root@server ~]# systemctl enable --now atd # 设置开机启动
[root@server ~]# systemctl status atd # 查看状态
3、at命令详解
1)格式
at -参数 日期时间
- at命令只要指定的时间正确,就可以执行对应的命令
- at命令的输出结果不会显示到屏幕上
- at命令中执行的命令最好使用绝对路径,不容易报错
- 过程:输入at 时间 -> 回车 ->输入执行的命令->ctrl+d退出at
- at命令只会执行一次
at命令执行过程分析
- 寻找/etc/at.allow (白名单)是否存在,写在该文件中用户才可执行at命令
- 若/etc/at.allow不存在则寻找/etc/at.deny(黑 名单)文件,写在该文件中的用户不能使用at命令
- 若两个文件都不存在则只有root用户可以使用at 命令
注意:若拒绝某用户使用at命令则可以将用户名写入 到/etc/at.deny中
2)参数
-m 当任务完成后,即使没有标准输出,也会给用户发送邮件
-l 列出系统上所有用户的at任务,等价于atq
-d 删除或取消一个任务
-v 使用时间格式,列出at任务
-c 可以列出任务之后的命令内容
-f 从文件中读取
3)时间格式
参数 说明
HH:MM 在今天HH小时的MM分钟执行,若时间 点错过,将在明天执行
HH:MM YYYY-MM-DD 规定在某年某月的某一天的特殊时刻执行 该工作
now +2 minutes 从现在开始的minutes、hours、days、 weeks执行
4、实例
1)延迟执行ls /root ,并将结果写入到at.txt中
[root@server ~]# at 14:17
warning: commands will be executed using
/bin/sh
at> ls /root > at.txt
at> <EOT> # 点击ctrl+d 结束交互性界面
# CTRL+“backspace” 删除字符
[root@server ~]# at -l # 查看已存在的计划任务
3 Thu May 25 14:17:00 2023 a root
[root@server ~]# atq # 查看已存在的计划任务
3 Thu May 25 14:17:00 2023 a root
2)不使用交互性命令实现,通过管道符命令执行
[root@server ~]# echo "echo 'hello again'
>> at.txt" | at now +1 minute
3)设置某账户at命令不可用
[root@server ~]# useradd ce1 # 新建账户
[root@server ~]# passwd ce1 # 设置密码 (更改用户 ce1 的密码)
[root@server ~]# tail -1 /etc/passwd # 倒叙查看账户管理文件
ce1:x:1001:1001::/home/ce1:/bin/bash
[root@server ~]# vim /etc/at.deny # 设置黑名单(输入ce1)
[root@server ~]# su ce1 # 切换账户
[ce1@server ~]$ at 14:36 # 测试,at命令不可用
You do not have permission to use at.
[ce1@server ~]$ su root # 切换到root账户
密码:
su: 拒绝权限
# 安全考虑,openEuler做了用户权限切换限制,解决方法如下:
# 重新开启一个ssh连接,以root账户登录
#PAM(Pluggable Authentication Modules)负责系统中很多应用程序的登录认证,安全设置问题
[root@server ~]# vim /etc/pam.d/su # 注释掉auth required pam_wheel.souse_uid
二、循环执行的例行性任务-- crontab(周期性)
1、crontd服务
at 命令是在指定的时间只能执行一次任务
crontab 命令可以循环重复的执行定时任务
安装:
[root@server ~]# yum install crontabs #安装
[root@server ~]# systemctl status crond #查看状态
crond 进程每分钟会定期检查是否有要执行的任务,如果有,则会自动执行该任务,crontab 命令需要 crond 服务支持
2、工作过程
当系统中有 /etc/cron.allow 文件时,只有写入此文件的用户可以使用 crontab 命令,没有写入的用户不能使用 crontab 命令。
同样,如果有此文件,/etc/cron.deny 文件会被忽略,因为/etc/cron.allow 文件的优先级更高
当系统中只有 /etc/cron.deny 文件时,写入此文件的用户不能使用 crontab 命令,没有写入文件的用户可以使用 crontab 命令
crontab 执行的每一项工作都会被记录到 /var/log/cron 这个日志文件中
当用户使用 crontab 新建工作之后,该项工作就会被记 录到 /var/spool/cron/目录里面
3、crontab命令详解
crontab [-u user] [-l| -r | -e]
-u 只有root才能执行该任务
-e 编辑crontab工作内容
-l 查询crontab任务内容
-r 删除cronatb任务
编辑crontab
[root@server ~]# crontab -e
代表意义 分钟 小时 日期 月份 星期 命令
数字范围 0- 59 0- 23 1- 31 1- 12 0-7(0和7表示 周日) 执行的动作
注:日期和星期 二写一 (日期星期有重复 )
*/5 6-8 * 8 1 /bin/bash /test.sh
表示在八月份的每个星期一,六点到八点这个范围内每隔五分钟执行一次存储在/test.sh下的脚本
特殊字符
* 任意时刻
- 表示时间范围
, 分割时刻(逗号)
*/数字 指定时间间隔的频率,如:每3分钟执行一 次,*/3
书写定时任务的注意事项
- 6 个字段都不能为空,如果不确定则使用*表示任意时间
- crontab命令任务的最小时间单位为分钟,最大有效时间为月
- 定义时间时,日期和星期最好不要一起出现
- 在定时任务中不管是写命令还是在脚本中写命令, 最好都用绝对路径,相对路径有时会报错
系统级别的计划任务
crontab -e 时每个用户都可以执行的命令,但有时定时任 务必须由系统执行,此时就需要编辑/etc/crontab配置文件来实现——在/etc/crontab 最后一行新增计划任务
[root@server ~]# vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
SHELL=/bin/bash : 指定系统使用那个shell解释器去
执行
PATH=/sbin:/bin:/usr/sbin:/usr/bin : 系统执行命令
的搜索路径
MAILTO=root : 表示执行任务的信息通过邮件发送给
谁
user-name : 表示执行命令的用户
查看账户信息的三种路径
[root@server ~]# cat /etc/passwd 账户查看
[root@server ~]# cat /etc/group 工作组
[root@server ~]# cat /etc/shadow 账号密码
Linux中单引号、双引号及反引号的区别
1.单引号:
——所见即所得,直接显示单引号里的内容(单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的)。
2.双引号:
——先把变量解析之后,再输出(把双引号内的内容输出出来;如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来)。
双引号括起来的字符中,"$"、反斜杠(\)和反引号(` `)是拥有特殊含义的:
- $ 代表引用变量的值;
- \ 反斜杠是转义字符;
- `` 反引号代表引用命令
3.反引号:
——用于命令替换,即先执行反引号中的语句,再把结果加入到原命令中。
引用于Linux Shell中单引号、双引号、反引号的解释 - 知乎