首页 > 技术分享 > Debian
收藏

Debian定时任务cron/crond/crontab使用方法和常见问题

09/21 11:28
大潇博客 原创文章,转载请标明出处

linux中有一个命令可以定期来执行系统任务,比如:执行自检、启动|停止服务、同步时间、curl访问接口等,这就是crond服务


crond属于系统调度进程,有的系统可能init.d目录下没有crond,只有cron,它们是一样的,只是名字不同


crond执行的任务有两种设置方式

1、通过crontab命令设置,crontab命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件来保存调度信息。系统管理员可以通过cron.deny 和 cron.allow 这两个文件来禁止或允许

2、通过编辑/etc/crontab文件设置


常用命令

service crond start     //启动服务

service crond stop      //关闭服务

service crond restart   //重启服务

service crond reload    //重新载入配置

service crond status    //查看crontab服务状态


定时任务设置

crontab -e

或者

vi /etc/crontab

1. 输入 crontab -e

2. 按下 a 键进入到编辑模式

3. 输入 0 */1 * * * /home/work/start-service.sh

4. 同时按下 ctrl+c 退出编辑模式

5. 按下 shift+: 输入 wq 退出 crontab

vi编辑文件步骤一样


参数说明

crontab [-u username] [-l|-e|-r]

-u: 只有root才能进行这个任务,也即帮其他用户新建/删除crontab工作调度;

-e: 编辑crontab 的工作内容;

-l: 查阅crontab的工作内容;

-r: 删除所有的crontab的工作内容,若仅要删除一项,请用-e去编辑。


定时任务格式

*      *    *    *    *  command

分 时  日  月  周    命令

若上文格式混乱,可参考图片

定时任务格式.png


第1列表示分钟1~59,每分钟用*或者 */1表示

第2列表示小时1~23(0表示0点)

第3列表示日期1~31

第4列表示月份1~12

第5列标识号星期0~6(0表示星期天)

第6列要运行的命令


星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”。

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”。

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。


实例

0 5 * * * /usr/local/do.sh   //每天凌晨5点执行do.sh文件


10 20 * * * /usr/local/nginx/sbin/nginx -s restart   //每晚的20:10重启nginx


30 8 3,13,23 * * /usr/local/nginx/sbin/nginx -s restart  //每月3、13、23日的8 : 30重启nginx


0 23 * * 6 /usr/local/nginx/sbin/nginx -s restart   //每星期六的晚上11 : 00重启nginx


20 5 * * 5,0 /usr/local/nginx/sbin/nginx -s restart  //每周六、周日的5 : 20重启nginx


0,30 18-22 * * * /usr/local/nginx/sbin/nginx -s restart   //每天18 : 00至22 : 00之间每隔30分钟重启nginx


* 23-7/1 * * * /usr/local/nginx/sbin/nginx -s restart    //晚上11点到早上7点之间,每隔一小时重启nginx


*/1 * * * * root curl http://www.***.com/update_url    //每一分钟访问一次接口


* */1 * * * /usr/local/nginx/sbin/nginx -s restart   //每一小时重启nginx


0 12 6 * mon-wed /usr/local/nginx/sbin/nginx -s restart    //每月的6号与每周一到周三的12点重启nginx


0 5 1 jan * /usr/local/nginx/sbin/nginx -s restart     //一月一号的5点重启nginx


*/30 * * * * /usr/sbin/ntpdate 210.72.145.44    //每半小时同步一下时间,中国国家授时站的IP地址,同步成功率为99%


注意

1、cron命令不执行排查方法:

⑴ 检查cron有没有运行,如果在运行重启一下cron,让它重新加载配置

⑵ 检查配置文件有没有格式错误

⑶ 检查时区,时间是东8区,设定02:00点执行的命令,实际10:00点执行,这时可以变通下,把时间+8设定为18:00,就可以02:00执行了

2、使用curl访问接口的地址中,不能拼接过多的“&”符号,否则访问失败(此部分属于curl知识,可以直接通过curl命令测试地址是否可行),建议使用nginx的rewrite简化地址,减少错误率。


打赏

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311