Linux 任务计划 cron
介绍
crontab 命令被用来提交和管理用户的需要周期性执行的任务,与 windows 下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动 crond 进程,crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
命令语法
crontab [options]
命令选项
-e:=edit 编辑用户的计时器设置
-l:=list 列出用户的计时器设置
-r:=remove 删除用户的计时器设置
-u:=user 指定设定计时器的用户
- 查看任务计划的配置文件
[root@localhost ~]# cat /etc/crontab //查看任务计划的配置文件
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin //当我们定义一个任务计划的时候,需要把路径加入到此路径下,或者任务计划的路径为绝对路径,此任务计划才能正常执行。
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 //用户(不加就是root),和你要定义的命令
- 设定计划任务
[root@localhost ~]# crontab -e //设定任务
0 3 * * * root /bin/bash /usr/local/sbin/123.sh >>/tmp/123.log 2>>/tmp/123.log
0 3 1-10 * root/2 2,5 /bin/bash /usr/local/sbin/123.sh >>/tmp/123.log 2>>/tmp/123.log
说明:
第一条命令解析: 0 3 表示凌晨 3 点,其他以 * 代替的表示每天; /bin/bash
表示要执行的计划是一个脚本; /usr/local/sbin/123.sh 表示脚本名; >>/tmp/123.log
表示把正确的输出结果每天追加到 123.log 日志里; 2>>/tmp/123.log
表示同时把错误的输出结果每天也追加到 123.log 日志里; 第 6 段没加用户名说明:在哪个用户下面,默认就是哪个用户;
总体意思是每天的凌晨 3 点把脚本的正确和错误的输出记录到 123.log 里面 (每天追加)。第二条命令解析: 1-10 表示某个月的 1-10 号;
*/2 表示偶数月; 2,5 表示星期的星期 2 和星期 5; 总体意思是: 每个偶数月的每个 1 号到 10 号的每个星期 2 和星期 5,把脚本的正确和错误的输出记录到 123.log 里面。
- 查看是否启动 crond 服务(定义的计划是否运行)和查看服务状态
[root@localhost ~]# systemctl start crond //1.通过进程查看
[root@localhost ~]# ps aux |grep cron
root 632 0.0 0.1 126220 1672 ? Ss 20:21 0:00 /usr/sbin/crond -n
root 5866 0.0 0.0 112664 972 pts/1 S+ 23:58 0:00 grep --color=auto cron
[root@localhost ~]# systemctl status crond //2.查看状态。如果第三列的Active:后面显示的是绿色说明是启动状态。
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since 五 2017-12-01 17:31:42 CST; 3 days ago
Main PID: 632 (crond)
CGroup: /system.slice/crond.service
└─632 /usr/sbin/crond -n
12月 01 17:31:42 localhost.localdomain systemd[1]: Started Command Scheduler.
12月 01 17:31:42 localhost.localdomain systemd[1]: Starting Command Scheduler...
12月 01 17:31:43 localhost.localdomain crond[632]: (CRON) INFO (RANDOM_DELAY will be scal....)
12月 01 17:31:43 localhost.localdomain crond[632]: (CRON) INFO (running with inotify support)
Hint: Some lines were ellipsized, use -l to show in full.
- 停止 crond 服务
[root@localhost ~]# systemctl stop crond.service