linux 定时任务 cron,利用cron进程保活

2018/03/13 17:44
阅读数 550

cron定时任务

crond服务操作命令
  /sbin/service crond start //启动服务
  /sbin/service crond stop //关闭服务
  /sbin/service crond restart //重启服务
  /sbin/service crond reload //重新载入配置
  /sbin/service crond status //查看服务状态 

一、crontab命令选项

#crontab -u <-l, -r, -e>
-u:指定一个用户
-l:列出某个用户的任务计划
-r:删除某个用户的任务
-e:编辑某个用户的任务
 
Minute Hour Day Month Week command  
分钟    小时  天   月   星期   命令  
0-59   0-23 1-31 1-12 0-6  command
“*”代表取值范围内的数字, 
“/”代表”每”, 
“-”代表从某个数字到某个数字, 
“,”分开几个离散的数字
 
每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。

二、/etc/crontab

如在 /etc/crontab 文件中run-parts部分所示,它使用 run-parts 脚本来执行存在于 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 目录中的脚本,这些脚本被相应地按照预设时间在每小时、每日、每周、或每月执行。这些目录中的文件应该是 shell 脚本,并且具有可执行权限(chmod +x filename)。
 
如果某 cron 任务需要根据调度来执行,而不是每小时、每日、每周、或每月地执行,它可以被添加到/etc/cron.d目录中。该目录中的所有文件使用和 /etc/crontab 中一样的语法。

一、/etc/crontab文件和crontab -e命令区别

1、格式不同

前者

# 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

后者

#50 1 * * *  command

2、使用范围

修改/etc/crontab这种方法只有root用户能用,这种方法更加方便与直接直接给其他用户设置计划任务,而且还可以指定执行shell等等,
crontab -e这种所有用户都可以使用,普通用户也只能为自己设置计划任务。然后自动写入/var/spool/cron/usename
3.服务重启
 1 /etc/init.d/crond restart
 2 service crond restart

四、cron任务文件

cron 会从如下这些地方读取安装的任务:

/etc/anacrontab
这个文件存着系统级的任务。它主要用来运行每日的(daily),每周的(weekly),每月的(monthly)的任务。一般不在此文件安装自己的任务

/etc/cron.d/
此目录下存放的是系统级任务的任务文件。

/var/spool/cron/
此目录下存放各个用户的任务文件。各个用户的任务存放在以自已用户名为文件名的任务文件中。此文件中的指令行没有用户域。

五、日志文件

可以通过查看文件/var/log/cron查看任务的运行情况。

新任务安装后或任务修改后不需要重启cron进程即可生效

六、例子:每天执行一次的日志清理任务

#!/bin/sh
find /opt/taobao/install/antdnsfilter/logs/antdnsfilter -type f -ctime +10 | xargs rm -f

 

保存文件cleanlog,放到/etc/cron.daily/目录下,文件权限755. 每天03:40:01执行

七、例子:进程保活,每分钟执行一次 

* * * * * root  /opt/taobao/install/antdnsfilter/antdnsfilter/bin/checkService.sh > /dev/null 2>&1

 保存文件monitor,放到/etc/cron.d/目录下,文件权限644,否则BAD FILE MODE。

保留个空行,我自己调试的时候,没空行的情况会不执行。

> /dev/null 2>&1 表示标准输出流和标准错误流会被重定向到/dev/null,如果不加这一句,会报没有权限。
(CRON) EXEC FAILED (/dev/null): Permission denied
 
提高检测频率,10s一次:
* * * * * root  /opt/taobao/install/antdnsfilter/antdnsfilter/bin/checkService.sh > /dev/null 2>&1
* * * * * root  sleep 10 && /opt/taobao/install/antdnsfilter/antdnsfilter/bin/checkService.sh > /dev/null 2>&1
* * * * * root  sleep 20 && /opt/taobao/install/antdnsfilter/antdnsfilter/bin/checkService.sh > /dev/null 2>&1
* * * * * root  sleep 30 && /opt/taobao/install/antdnsfilter/antdnsfilter/bin/checkService.sh > /dev/null 2>&1
* * * * * root  sleep 40 && /opt/taobao/install/antdnsfilter/antdnsfilter/bin/checkService.sh > /dev/null 2>&1
* * * * * root  sleep 50 && /opt/taobao/install/antdnsfilter/antdnsfilter/bin/checkService.sh > /dev/null 2>&1

 

八、查看所有用户的crontab任务

cat /etc/passwd | cut -f 1 -d : |xargs -I {} crontab -l -u {}

 


附录: 
 
让Linux下的cron以秒为单位执行shell脚本的3种方法: http://www.jb51.net/article/56435.htm
crontab 解决周期内未执行完重复执行 :http://blog.csdn.net/phachon/article/details/52106409
/etc/crontab文件和crontab -e命令区别 : http://www.cnblogs.com/xd502djj/p/4292781.html
cron配置 https://www.cnblogs.com/shuaiqing/p/7742382.html

linux单进程服务保活supervise

关于linux服务器进程监控及自动重启的简单方案 : http://blog.csdn.net/ljxfblog/article/details/40362229

http://blog.chinaunix.net/uid-26588712-id-3196464.html

https://yq.aliyun.com/articles/47001
bash: /dev/null: Permission denied , Why???? :http://www.linuxforums.org/forum/newbie/27030-bash-dev-null-permission-denied-why.html
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部