crontab
crontab并不陌生,在*nix的操作系統(tǒng)之中,使用它設(shè)置周期性被執(zhí)行的指令.每個(gè)用戶可以擁有自己的crontab文件;
同時(shí),操作系統(tǒng)保存一個(gè)針對整個(gè)系統(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:用來設(shè)定某個(gè)用戶的crontab服務(wù);
- file:file是命令文件的名字,表示將file做為crontab的任務(wù)列表文件并載入crontab。如果在命令行中沒有指定這個(gè)文件,crontab命令將接受標(biāo)準(zhǔn)輸入(鍵盤)上鍵入的命令,并將它們載入crontab。
- -e:編輯某個(gè)用戶的crontab文件內(nèi)容。如果不指定用戶,則表示編輯當(dāng)前用戶的crontab文件。
- -l:顯示某個(gè)用戶的crontab文件內(nèi)容,如果不指定用戶,則表示顯示當(dāng)前用戶的crontab文件內(nèi)容。
- -r:從/var/spool/cron目錄中刪除某個(gè)用戶的crontab文件,如果不指定用戶,則默認(rèn)刪除當(dāng)前用戶的crontab文件。
- -i:在刪除用戶的crontab文件時(shí)給確認(rèn)提示。
最常用的參數(shù)有-l 查詢和-e 編輯
配置格式
- 第1列分鐘0~59
- 第2列小時(shí)0~23(0表示子夜)
- 第3列日1~31
- 第4列月1~12
- 第5列星期0~7(0和7表示星期天)
- 第6列要運(yùn)行的命令
配置示例
每分鐘執(zhí)行一次:
* * * * * /path/to/your/app.sh
每半分鐘執(zhí)行一次:
*/2 * * * * /path/to/your/app.sh
每小時(shí)的第3和第15分鐘執(zhí)行:
3,15 * * * * /path/to/your/app.sh
在上午8點(diǎn)到11點(diǎn)的第3和第15分鐘執(zhí)行:
3,15 8-11 * * * /path/to/your/app.sh
每周六23點(diǎn)執(zhí)行:
0 23 * * 6 /etc/init.d/smb restart
簡單應(yīng)用
檢測并自動(dòng)重啟服務(wù)
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
檢測并自動(dòng)重啟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
注意設(shè)置環(huán)境變量
由于crontab執(zhí)行任務(wù)時(shí)不加載任何環(huán)境變量,可以在腳本中加入必要的環(huán)境變量,甚至ulimit設(shè)置,以保證程序可以正常執(zhí)行。
vi start.sh
!/bin/sh
source /etc/profile
export YOUR_ENV=value
ulimit -n 10240
/path/to/your/app/run