linux计划任务
在使用linux系统的过程中,为了解放人力,通常会设置定时任务来减轻设置重复性系统管理任务的操作
查看cron运行状态
systemctl status crond
若为安装cron,可执行命令yum -y install cron
安装
管理周期计划任务
常用参数说明:
-u user 指定用户
-e 编辑某个用户的计划任务文件,若不指定用户,默认编辑当前用户的计划任务
-l 显示某个用户的计划任务文件,若不指定用户,默认显示当前用户的计划任务
-r 清空某个用户的计划任务文件,若不指定用户,默认清空当前用户的计划任务
使用示例:
crontab -u foo -e #编辑用户 foo 的计划任务文件
crontab -e #编辑当前用户的计划任务文件
crontab -u foo -l #显示用户 foo 的计划任务文件
crontab -l #显示当前用户的计划任务文件
crontab -r #清空当前用户的计划任务文件
crontab的配置文件和目录:
crontab通过多个目录和文件设置计划任务,不同类型的任务有不同的配置文件来设置
/etc/crontab 系统任务配置文件
/etc/crontab
文件中设置的是维护Linux操作系统所需的任务,Linux操作系统及相关程序在安装时可自动设置,不建议用户手动修改此文件
[root@localhost ~]# 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
文件中设置包括shell环境,可执行路径等变量的操作,以及每小时,每天,每月需要制定的任务目录。根据/etc/crontab
配置文件中的设定,crond将安装不同的周期重复执行相应目录中的脚本文件
另外,使用一些特殊符号可实现更灵活的配置
* 代表所有值
/ 代表“每”
- 代表区间
, 代表分割枚举
/var/spool/cron 用户cron任务的配置文件存放目录
由用户自行设置(使用crontab命令)的cron计划任务会被保存到目录/var/spool/cron/
中,文件名与用户名相同
[root@localhost cron]# crontab -l
* * * * * sleep 5; /usr/bin/python /mnt/netclient.py >> /mnt/log.txt
5 * * * * /usr/bin/ls /opt/
[root@localhost cron]# pwd
/var/spool/cron
[root@localhost cron]# ll
total 4
-rw-------. 1 root root 97 Oct 15 16:32 root
[root@localhost cron]# cat root
* * * * * sleep 5; /usr/bin/python /mnt/netclient.py >> /mnt/log.txt
5 * * * * /usr/bin/ls /opt/
[root@localhost cron]#
crond守护进程会自动检查/etc/crontab
文件,/etc/cron.d/
目录及/var/spool/cron/
目录中的改动,如果发现有配置更改,它们就会被载入内存,所以,当某个crontab文件改动后并不需要重新启动,crond守护进程就可以使设置生效。
一次性任务设置
有时我们不需要一个作业周期性执行,而是只需要它在未来的某个时间完成一次就好,这时设置一个一次性任务即可(通过atd服务来实现)
设置一次性任务的前提是atd服务已运行,若未安装执行yum -y install at
设置一次性任务的时候,在at命令行中一次指定执行任务的时间,日期作为参数(若只指定时间则表示当天的时间,若只指定时间则表示当天的时间,若只指定日期则表示该日期的当前时间)确认后将进入’at>'提示符的任务编辑页面,每行设置一条执行命令,可以一次设置多条语句,最后按Ctrl+D
组合键提交任务。
[root@localhost ~]# at 18:45 2019-10-15
at> /usr/bin/echo '222' > /opt/abc
at>
job 5 at Tue Oct 15 18:45:00 2019
Can't open /var/run/atd.pid to signal atd. No atd running?
[root@localhost ~]# systemctl start atd
[root@localhost ~]# at 18:45 2019-10-15
at> /usr/bin/echo '222' > /opt/abc
at>
job 6 at Tue Oct 15 18:45:00 2019
[root@localhost ~]# atq
4 Tue Oct 15 18:45:00 2019 a root
5 Tue Oct 15 18:45:00 2019 a root
6 Tue Oct 15 18:45:00 2019 a root
[root@localhost ~]# cat /opt/abc
222
[root@localhost ~]#
atq
命令用于查看未执行的一次性任务
若要删除指定编号的at任务,可以使用atrm
命令。删除后的at任务将不会被执行,并且不会出现在atq命令的显示结果中,已经执行过的任务无法删除。
[root@localhost ~]# atrm 4
删除第四条计划任务