引言:了解定时任务的初心就是为了能定时签到,然后再顺便学习Linux。
操作系统:Centos 7
Linux上用于处理定时任务的有两个工具:at、crontab
名称 | 应用场景 | 对应服务 |
---|---|---|
at | 执行一次 | atd |
crontab | 重复执行 | cron |
atd 的启动方式与 at的使用方法
启动服务
➜ ~ systemctl restart atd # 重启atd服务
➜ ~ systemctl enable atd # 将atd服务设置为开机自启
➜ ~ systemctl status atd # 查看atd服务的当前状态
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-03-14 21:20:56 CST; 13s ago
Main PID: 1002 (atd)
CGroup: /system.slice/atd.service
└─1002 /usr/sbin/atd -f
Mar 14 21:20:56 VM_centos systemd[1]: Started Job spooling tools.
Mar 14 21:20:56 VM_centos systemd[1]: Starting Job spooling tools...
at的控制方式
1、查看/etc/at.allow ,只有在这个文件中的用户才可使用at
2、/etc/at.allow不存在时,则查看/etc/at.deny,在这个文件中的用户则不能使用at
3、如果两个文件都不存在,则只用root才可使用
at的使用方法
at [-mldv] time
- -m:at工作完成后,以email通知用户
- -l:at -l 相当于atq,列出所有at任务
- -d:at -d 相当于atrm,后面跟任务number,取消一个at工作
- -v:可以使用较明显的时间格式列出 at 排程中的工作列表 # 好像没什么用
- -c:列出后面的该项工作的指令内容
- time:
时间格式 | 示例 | 描述 |
---|---|---|
HH:MM | 04:00 | 在今天的HH:MM执行 |
HH:MM YYYY-MM-DD | 04:00 2015-07-30 | 指定在某年某月的某一天执行 |
HH:MM[am|pm] + number [minutes|hours|days|weeks] | now + 5 minutes| 04pm + 3 days | 在指定的时间点执行 |
如果想让任务执行的信息显示在终端上,
➜ ~ tty # 查看当前终端
/dev/pts/0
➜ ~ at now + 3 minutes
at> echo "hello" > /dev/pts/0 # 三分钟后,会在/dev/pts/0 终端输出 hello
at> <EOT> # ctrl + d 退出
job 14 at Wed Mar 14 22:02:00 2018
➜ ~ at now + 4 minutes
at> echo "hello 2" > /dev/pts/0
at> <EOT>
job 15 at Wed Mar 14 22:03:00 2018
➜ ~ at -l # 查看当前at工作列表
14 Wed Mar 14 22:02:00 2018 a root
15 Wed Mar 14 22:03:00 2018 a root
➜ ~ atq # 等同于 at -l
14 Wed Mar 14 22:02:00 2018 a root
15 Wed Mar 14 22:03:00 2018 a root
➜ ~ atrm 14 # 移除编号为14的工作
➜ ~ atq
15 Wed Mar 14 22:03:00 2018 a root
➜ ~
备注:系统有空时才会进行背景任务(系统不会优先处理at任务)
crontab的启动方式及使用方法
at的控制方式
- /etc/cron.allow 在此文件中才可使用crontab
- /etc/cron.deny 在此文件中不允许使用crontab
注:/etc/cron.allow 比/etc/cron.deny优先级高
语法
crontab [-u username] [-l|-e|-r]
选项与参数:
-u :只有root 才能进行这个任务,亦即帮其他使用者建立/移除crontab 工作排程; -e :编辑crontab 的工作内容 -l :查阅crontab 的工作内容 -r :移除所有的crontab 的工作内容,若仅要移除一项,请用-e 去编辑。
➜ ~ cat /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
示例:
crontab -e # 进入文件后
编辑如下内容,下面表示每分钟执行一次test.py文件
*/1 * * * /root/test.py
下面这个是python文件的前两行注释,用于申明用什么程序去执行该文件
#!/root/bin/python
# Python file
import time
with open('/tmp/cron.log', 'a') as f:
f.write(time.asctime()+ '\n')
如果任务上述步骤没有日志产生的话,那就给文件添加可执行权限
chmod +x /root/test.py
等一分钟去/tmp目录下查看,大概会看见如下所示的内容
➜ ~ cat /tmp/cron.log
Wed Mar 21 23:36:01 2018
Wed Mar 21 23:37:01 2018
Wed Mar 21 23:38:01 2018
Wed Mar 21 23:39:01 2018
Wed Mar 21 23:40:01 2018
Wed Mar 21 23:41:01 2018
参考资料:鸟哥的Linux私房菜