crontab配置及简单应用

2017-03-20  本文已影响237人  bluexiii

crontab

crontab并不陌生,在*nix的操作系统之中,使用它设置周期性被执行的指令.每个用户可以拥有自己的crontab文件;
同时,操作系统保存一个针对整个系统的crontab文件,该文件通常存放于/etc或者/etc之下的子目录中。

pi@raspberrypi:/etc $ ls -al|grep cron
drwxr-xr-x   2 root root    4096 Jan  1  1970 cron.d
drwxr-xr-x   2 root root    4096 Jan  1  1970 cron.daily
drwxr-xr-x   2 root root    4096 Jan  1  1970 cron.hourly
drwxr-xr-x   2 root root    4096 Jan  1  1970 cron.monthly
drwxr-xr-x   2 root root    4096 Jan  1  1970 cron.weekly
-rw-r--r--   1 root root     722 Sep  5  2015 crontab

基本用法

最常用的参数有-l 查询-e 编辑

配置格式

配置示例

每分钟执行一次:

* * * * * /path/to/your/app.sh

每半分钟执行一次:

*/2 * * * * /path/to/your/app.sh

每小时的第3和第15分钟执行:

3,15 * * * * /path/to/your/app.sh

在上午8点到11点的第3和第15分钟执行:

3,15 8-11 * * * /path/to/your/app.sh

每周六23点执行:

0 23 * * 6 /etc/init.d/smb restart

简单应用

检测并自动重启服务

crontab -e
*/2 * * * * isfound=$(ps | grep "redsocks" | grep -v "grep"); if [ -z "$isfound" ]; then echo "$(date): restart redsocks...">>/tmp/log/redsocks-mon.log && /etc/init.d/redsocks restart; fi

检测并自动重启tomcat

*/2 * * * * sh /path/to/tomcat_monitor.sh
vi tomcat_monitor.sh
#!/bin/sh
source /home/user/.bash_profile
export PATH=$PATH:.:/bin:/sbin:/usr/bin:
pid_count=`ps aux|grep java|grep your-tomcat|grep -v grep|wc -l`
if [ $pid_count -ne 1 ]; then
        echo "stop download-tomcat, time: `date`"
        if [ $pid_count -gt 0 ]; then
                 ps aux|grep java|grep your-tomcat|grep -v grep|awk '{print $2}'|xargs kill
        fi
        sh /path/to/tomcat/bin/startup.sh
        echo "start download-tomcat finished, time: `date`"
fi

清理30天前的tomcat日志

crontab -e
0 23 * * * sh /path/to/clean_log.sh
vi clean_log.sh
DATE=$(date -d "30 days ago" +%Y-%m-%d)
echo $DATE
rm /path/to/tomcat/logs/*$DATE*

备份并清理catalina.out

crontab -e
00 22 * * * sh /path/to/clean_catalina_out.sh
vi clean_catalina_out.sh
y=`date "+%Y"`
m=`date "+%m"`
d=`date "+%d"`
cp /path/to/tomcat/logs/catalina.out /path/to/tomcat/logs/catalina.out.$y-$m-$d
echo > /path/to/tomcat/logs/catalina.out
exit

注意设置环境变量

由于crontab执行任务时不加载任何环境变量,可以在脚本中加入必要的环境变量,甚至ulimit设置,以保证程序可以正常执行。

vi start.sh

!/bin/sh
source /etc/profile
export YOUR_ENV=value
ulimit -n 10240
/path/to/your/app/run

参考文档

上一篇 下一篇

猜你喜欢

热点阅读