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
基本用法
- -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列要运行的命令
配置示例
每分钟执行一次:
* * * * * /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