crontab
crontab并不陌生,在*nix的操作系统之中,使用它设置周期性被执行的指令.每个用户可以拥有自己的crontab文件;
同时,操作系统保存一个针对整个系统的crontab文件,该文件通常存放于/etc或者/etc之下的子目录中。
1 2 3 4 5 6 7
| 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
|
基本用法
- -u user:用来设定某个用户的crontab服务;
- file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
- -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
- -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
- -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
- -i:在删除用户的crontab文件时给确认提示。
最常用的参数有-l 查询
和-e 编辑
配置格式
- 第1列分钟0~59
- 第2列小时0~23(0表示子夜)
- 第3列日1~31
- 第4列月1~12
- 第5列星期0~7(0和7表示星期天)
- 第6列要运行的命令
配置示例
每分钟执行一次:
1
| * * * * * /path/to/your/app.sh
|
每半分钟执行一次:
1
| */2 * * * * /path/to/your/app.sh
|
每小时的第3和第15分钟执行:
1
| 3,15 * * * * /path/to/your/app.sh
|
在上午8点到11点的第3和第15分钟执行:
1
| 3,15 8-11 * * * /path/to/your/app.sh
|
每周六23点执行:
1
| 0 23 * * 6 /etc/init.d/smb restart
|
简单应用
检测并自动重启服务
1 2
| 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
1
| */2 * * * * sh /path/to/tomcat_monitor.sh
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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日志
1 2
| crontab -e 0 23 * * * sh /path/to/clean_log.sh
|
1 2 3 4
| vi clean_log.sh DATE=$(date -d "30 days ago" +%Y-%m-%d) echo $DATE rm /path/to/tomcat/logs/*$DATE*
|
备份并清理catalina.out
1 2
| crontab -e 00 22 * * * sh /path/to/clean_catalina_out.sh
|
1 2 3 4 5 6 7
| 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设置,以保证程序可以正常执行。
1 2 3 4 5 6 7
| vi start.sh
!/bin/sh source /etc/profile export YOUR_ENV=value ulimit -n 10240 /path/to/your/app/run
|
参考文档