Linux Crontab 定时任务

一:安装

ubuntu安装

apt-get install cron

Centos安装

yum install vixie-cron
yum install crontabs

二:启动

启动服务 
service crond start 
关闭服务 
service crond stop 
重启服务 
service crond restart 
重新载入配置
service crond reload 
查看状态
service crond status 
设置开机自动启动crond服务:
chkconfig crond on 
开机级别的crond服务运行情况 ,2、3、4、5级别开机会自动启动crond服务 
chkconfig –list crond 
取消开机自动启动crond服务
chkconfig crond off

1. 启动cron
service crond start

2. cron帮助命令
man crontab

3. 查看cron任务
crontab -l
注: 刚开始添加暂无内容

5. 编辑cron任务
crontab -e

删除cron任务 使用下面的命令移除已经计划的cron作业
crontab -r
使用下面的命令移除所有已计划的cron作业,且无需再次确认。
crontab -ir

# 三: 执行脚本(两种)
1.在命令行输入
```bash
# 添加相应的任务,wq存盘退出。具体含义之后介绍  crontab -e其实是/usr/bin/crontab的文件执行
crontab -e # 配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务
# 列出当前使用crontab -e设置的的所有调度任务 
crontab -l 
# 列出用户jp的所有调度任务
crontab -l -u jp 
# 删除所有任务调度工作
crontab -r 

2.编辑文件
直接编辑/etc/crontab 文件,即 vi /etc/crontab,添加相应的任务。

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# 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

不同版本的解析crontab器有区别。
有的支持秒。
有的星期和day不能同时设置(后面会讲到*和?的区别)。

前四行是有关设置cron任务运行的环境变量。

  • SHELL:变量的值指定系统使用的SHELL环境(该样例为bash shell),

  • PATH:变量定义了执行命令的路径。

  • MAILTO: Cron的输出以电子邮件的形式发给MAILTO变量定义的用户名。如果MAILTO变量定义为空字符串(MAILTO=“”),电子邮件不会被发送。

  • HOME: 执行命令或脚本时HOME变量可用来设置基目录

四:命令详解

格式:

crontab [-u user] file
crontab [ -u user ] [ -i ] { -e | -l | -r }

-u user:用于设定某个用户的crontab服务;
file: file为命令文件名,表示将file作为crontab的任务列表文件并载入crontab;
-e:编辑某个用户的crontab文件内容,如不指定用户则表示当前用户;
-l:显示某个用户的crontab文件内容,如不指定用户则表示当前用户;
-r:从/var/spool/cron目录中删除某个用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。
分钟 小时 日 月 星期 命令

五:配置实例

再次提醒:不同版本的解析crontab器有区别!
有的支持秒。
有的星期和day不能同时设置(后面会讲到*和?的区别——不能同事设置星期和day的要用?而不能是*)。

* 和?的区别
是否能自动处理设置星期几和几号的

时间格式

分钟级别 不需要?的

每一分钟执行一次command(因cron默认每1分钟扫描一次,因此全为*即可)
* * * * *  command

每小时的第3和第15分钟执行command
3,15 * * * * command

每天上午8-11点的第3和15分钟执行command:
3,15 8-11 * * * command

每隔2天的上午8-11点的第3和15分钟执行command:
3,15 8-11 */2 * * command

每个星期一的上午8点到11点的第3和第15分钟执行command
3,15 8-11 * * 1 command

每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart

每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart

每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart

每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart

每一小时重启smb
* */1 * * * /etc/init.d/smb restart

晚上11点到早上7点之间,每隔一小时重启smb
* 23-7/1 * * * /etc/init.d/smb restart

每月的4号与每周一到周三的11点重启smb
0 11 4 * mon-wed /etc/init.d/smb restart

每小时执行/etc/cron.hourly目录内的脚本
0 1 * * * root run-parts /etc/cron.hourly

支持秒 星期和day可以同时设置的

等待补充

支持秒 需要?的(day和星期不能同时)

如何输入多个命令

#crontab执行
0 5 0 * * 2 (export CI_ENV=testing && /usr/local/bin/php /home/q/system/safe-cactus/application/script/crontab/CalHardWareCount.php &>> /tmp/CalHardWareCount.php.log) 

#docker的命令
0 5 0 * * 2 (docker exec cactus-web /bin/bash -c 'export CI_ENV=production; /usr/local/bin/php /home/q/system/safe-cactus/application/script/crontab/CalHardWareCount.php &>> /tmp/CalHardWareCount.php.log') 

其他

注意事项

  • 直接crontab好像不能使用 得-e加到文件里
  • docker中可能会出问题 需要先杀掉crontab进程 再启动
  • 请先网上找个crontab验证的 看一看执行时间是否符合预期
  • 经常备份文件 有时候会莫名其妙丢失 特别是在重启crontab时

docker中如何使得设置生效

$ ps -ef |grep cron   

root      1036  1020  0 Sep14 pts/122  00:00:00 crontab -e
root      1037  1036  0 Sep14 pts/122  00:00:00 /usr/bin/vi /tmp/crontab.NuraUJ
root     15936     0  0 20:51 ?        00:00:00 /usr/sbin/crond
root     15964 15863  0 20:53 pts/171  00:00:00 grep --color=auto cron

$ kill 15936
$ /usr/sbin/crond

在docker外部如何使得内部docker定时任务生效

docker exec 容器名 /bin/bash -c 'export CI_ENV=production; /usr/local/bin/php 代码文件目录  &>> /tmp/log名.log'

定期清理日志

# 定时清理日志
0 * * * * find /data/nginx/logs/cactus.safe.360.cn/ -mtime "+180" -type f -exec rm {} \;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值