crontab
crontab并不陌生茁帽,在*nix的操作系統(tǒng)之中,使用它設置周期性被執(zhí)行的指令.每個用戶可以擁有自己的crontab文件奥喻;
同時慕嚷,操作系統(tǒng)保存一個針對整個系統(tǒng)的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文件時給確認提示。
最常用的參數(shù)有-l 查詢
和-e 編輯
配置格式
- 第1列分鐘0~59
- 第2列小時0~23(0表示子夜)
- 第3列日1~31
- 第4列月1~12
- 第5列星期0~7(0和7表示星期天)
- 第6列要運行的命令
配置示例
每分鐘執(zhí)行一次:
* * * * * /path/to/your/app.sh
每半分鐘執(zhí)行一次:
*/2 * * * * /path/to/your/app.sh
每小時的第3和第15分鐘執(zhí)行:
3,15 * * * * /path/to/your/app.sh
在上午8點到11點的第3和第15分鐘執(zhí)行:
3,15 8-11 * * * /path/to/your/app.sh
每周六23點執(zhí)行:
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
注意設置環(huán)境變量
由于crontab執(zhí)行任務時不加載任何環(huán)境變量骆膝,可以在腳本中加入必要的環(huán)境變量祭衩,甚至ulimit設置,以保證程序可以正常執(zhí)行阅签。
vi start.sh
!/bin/sh
source /etc/profile
export YOUR_ENV=value
ulimit -n 10240
/path/to/your/app/run