CRON计划任务

  sre

Dv6UeI.jpg
检查Linux是否已经安装crond

rpm -qa|grep cron  

若未安装先安装crontabs模块

yum install -y vixie-cron crontabs 

关闭服务 重启服务 重新载入配置 启动服务

/sbin/service crond stop  
/sbin/service crond restart  
/sbin/service crond reload  
/sbin/service crond start

服务配置文件: /etc/crontab

[root@sre ~]# 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

minute hour day month dayofweek command 

    minute – 从0到59的整数
    hour – 从0到23的整数
    day – 从1到31的整数 (必须是指定月份的有效日期)
    month – 从1到12的整数 (或如Jan或Feb简写的月份)
    dayofweek – 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)
    command – 需要执行的命令(可用as ls /proc >> /tmp/proc或 执行自定义脚本的命令)
*代表所有的取值范围内的数字,”/”代表每的意思,”*/5″表示每5个单位,”-“代表从某个数字到某个数字,”,”分开几个离散的数字。
例如:
 每两个小时 0 */2 * * *echo “Good morning.” >> /tmp/test.txt //(注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。)
晚上11点到早上8点之间每两个小时,早上八点 0 23-7/28 * * *
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 0 11 4 * 1-3 command line

45 4 1,10,22 * * /bin/date
每月1、1 0、2 2日的4 : 4 5运行date
0,30 18-23 * * * /bin/date
在每天1 8 : 0 0至2 3 : 0 0之间每隔3 0分钟运行date

@reboot 在这里是算作一个特殊的时间,后面就只能接命令,不能再设置别的时间了。

man 5 crontab 可以看到还有其它的,比如我这边的 linux 里面显示有以下八个:

string meaning


@reboot Run once, at startup.
@yearly Run once a year, “0 0 1 1 *”.
@annually (same as @yearly)
@monthly Run once a month, “0 0 1 * *”.
@weekly Run once a week, “0 0 * * 0”.
@daily Run once a day, “0 0 * * *”.
@midnight (same as @daily)
@hourly Run once an hour, “0 * * * *”.

7 thoughts on - CRON计划任务

  • crontab与执行结果不一致:
    在脚本头刷新环境变量
    source ~/.bash_profile
    source /etc/profile

  • 每五分钟执行 */5 * * * *

    每小时执行 0 * * * *

    每天执行 0 0 * * *

    每周执行 0 0 * * 0

    每月执行 0 0 1 * *

    每年执行 0 0 1 1 *

  • 在执行crontab -e命令时,会在/var/spool/cron目录下创建一个文件,文件的名称是你当前的用户名,内容就是你添加的计划任务。

  • 首先需要为 /etc/rc.local 添加执行权限,
    $ sudo chmod +x /etc/rc.local
    如果是 CentOS,我们修改的是文件 /etc/rc.d/rc.local 而不是 /etc/rc.local

  • crontab为何自动中断
    https://mp.weixin.qq.com/s/KdgIYX4zb_xoYNVIugBLvg
    原来,这是由于在部分机器上,crontab对于执行程序的输出有大小限制,输出超出一定的字节之后就会自动停止程序。

    而我的程序每发送1000条数据即会输出一条log,所以每次正好输出49000这条log之后,就超出了大小限制,因此每次都会自动停止在48999条了。

    解决方案:可以 重定向输出至 >/dev/null,如

LEAVE A COMMENT

Captcha Code