Linux计划任务

missingmuch 2020-04-30

一次性计划任务

负责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的工作情况如下:

  1. 寻找/etc/at.allow文件(管理较为严格的方式),只有写在这个文件中的使用者才可以使用at,没有在这个文件中的使用者不可以使用at(即使没有写在at.deny中)
  2. 如果/etc/at.allow不存在,就寻找 /etc/at.deny 这个文件(管理较为松散的方式),若写在这个 at.deny 的使用者则不能使用 at , 而没有在这个 at.deny 文件中的使用者,就可以使用 at 
  3. 如果两个文件都不存在,则只有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服务设置任务的参数格式:分时日月周!如果有些字段没有设置,则需要使用星号*占位。

注意:计划任务中的分字段必须有数值,绝不能为空或者是*号,日和星期字段不能同时使用,否则会产生冲突。

Linux计划任务

特殊符号的含义:

  • *:任意/每
  • /:指定时间的间隔频率;*/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

相关推荐