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