Linux计划任务
一次性计划任务
负责at的服务atd
一次性计划任务只能执行一次,一般用于满足临时的工作需求。
可以使用at命令实现该功能,使用at命令需要启用负责该任务的服务—atd。
[ Desktop]# systemctl restart atd [ Desktop]# systemctl enable atd [ Desktop]# systemctl status atd ● atd.service - Job spooling tools Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-04-30 11:23:24 CST; 14s ago Main PID: 4622 (atd) CGroup: /system.slice/atd.service └─4622 /usr/sbin/atd -f Apr 30 11:23:24 localhost.localdomain systemd[1]: Started Job spooling tools. Apr 30 11:23:24 localhost.localdomain systemd[1]: Starting Job spooling tools...
安全性问题
使用at产生所要运作的工作,并将这个工作以文本文件的方式写入/var/spool/at/目录内,该工作便等待着atd服务的取用与执行了。
为了系统的安全,可以使用/etc/at.allow与/etc/at.deny这两个文件来进行at的使用限制。加上这两个文件后,at的工作情况如下:
- 寻找/etc/at.allow文件(管理较为严格的方式),只有写在这个文件中的使用者才可以使用at,没有在这个文件中的使用者不可以使用at(即使没有写在at.deny中)
- 如果/etc/at.allow不存在,就寻找 /etc/at.deny 这个文件(管理较为松散的方式),若写在这个 at.deny 的使用者则不能使用 at , 而没有在这个 at.deny 文件中的使用者,就可以使用 at
- 如果两个文件都不存在,则只有root可以使用at指令
在一般的Linux发行版中,假设系统上的所有用户都是可信任的,因此系统通常会保留一个空的/etc/at.deny文件,这样允许所有人使用at指令。
at命令的使用
创建编辑计划任务:at 时间
[ Desktop]# at 12:30 at> reboot at> <EOT> 使用Ctrl+D结束编写计划任务 job 1 at Thu Apr 30 12:30:00 2020 [ Desktop]# echo "reboot" | at 12:30 使用管道符创建命令 job 2 at Thu Apr 30 12:30:00 2020
查看计划任务:at -l
[ Desktop]# at -l 1 Thu Apr 30 12:30:00 2020 a root 2 Thu Apr 30 12:30:00 2020 a root
删除计划任务:atrm 任务序号
[ Desktop]# atrm 2 [ Desktop]# at -l 1 Thu Apr 30 12:30:00 2020 a root
长期性计划任务
长期性计划任务可以周期性的、有规律的执行某些具体的任务,可以使用Linux系统中默认启用的cron服务。
安全性问题
用户使用crontab命令建立计划任务后,该项任务就会被记录到/var/spool/cron中,并以账号判别。
为了系统的安全性,可以如at相同限制使用crontab的使用者账号:
- /etc/cron.allow:将可以使用crontab的账号写入其中,若不在这个文件中的使用者不可使用crontab
- /etc/cron.deny:将不可以使用crontab账号的写入其中,若未记录在这个文件中的使用者则可以使用crontab
/etc/cron.allow比/etc/cron.deny优先级更高,两个文件只能选择一个限制,系统默认保留/etc/cron.deny。
crontab命令的使用
创建编辑计划任务:crontab -e
查看计划任务:crontab -l
删除计划任务:crontab -r
设置他人的计划任务:crontab -u
crond服务设置任务的参数格式:分时日月周!如果有些字段没有设置,则需要使用星号*占位。
注意:计划任务中的分字段必须有数值,绝不能为空或者是*号,日和星期字段不能同时使用,否则会产生冲突。
特殊符号的含义:
- *:任意/每
- /:指定时间的间隔频率;*/10=每隔十分钟(位于分字段);0-23/2=每隔两小时
- -:代表从某个数字到某个数字:8-17=8号到17号(日字段)
- ,:分开几个离散的数字:6,10-13,20=6号,10号到13号,20号(日字段)
系统级别的计划任务
crontab -e是针对使用者的cron设计的,crontab实际是/usr/bin/crontab这个执行文件。如果是系统级别的计划任务只需要编辑/etc/crontab这个文件即可。
Linux下crontab会自动每分钟读取一次/etc/crontab与/var/spool/cron中的内容。编辑/etc/crontab之后cron会自动执行。
[ Desktop]# ls /var/spool/cron/root /var/spool/cron/root [ Desktop]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root 若有额外的STDOUT,将数据email给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分时日月周身份命令七个字段
参考资料:
《鸟哥的Linux私房菜》
《Linux就该这么学》
https://blog.csdn.net/weixin_41843699/article/details/89463172