crontab是一個定時任務(wù)工具盛正,一般不需要安裝,類unix系統(tǒng)里都自帶了屑埋。
這里不過多介紹蛮艰,只記錄遇到的問題。
簡單的使用例子
目標(biāo):每分鐘調(diào)用a.sh,每分鐘執(zhí)行一次逗载,查看當(dāng)前時間并寫入run.txt文件蓄拣。
-
crontab -e
創(chuàng)建一個任務(wù),標(biāo)記為每分鐘執(zhí)行一次随闽。
* * * * * /bin/bash /home/yocn/crontab/a.sh > /home/yocn/crontab/out.log
- a.sh的內(nèi)容:
#!/bin/bash
chmod 777 /home/yocn/crontab/run.txt
echo `date` >> /home/yocn/crontab/run.txt
- 查看服務(wù)是否運(yùn)行
ubuntu上是service cron -l
mac上是sudo launchctl list | grep cron
- 開啟service
ubuntu上使用service cron start
,有的linux上可能是service crond start
。
mac上則是sudo /usr/sbin/cron start
mac上的crontab很好用莺丑,一般上面的做完就直接能運(yùn)行了,ubuntu上則比較費(fèi)勁墩蔓。
在使用crontab
的時候感覺它就像一個黑盒梢莽,屬于干啥都沒反饋,配置上了沒反應(yīng)奸披,也沒有錯誤提示昏名。主打一個打不還手,罵不還口阵面,主打一個無招勝有招轻局。
所以下面介紹如何開啟日志洪鸭,查看錯誤log。
開啟ubuntu上crontab的錯誤日志
- 修改
sudo vim /etc/rsyslog.d/50-default.conf
# First some standard log files. Log by facility.
#
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
#daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
#lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
#user.* -/var/log/user.log
把這一行cron.* /var/log/cron.log
打開仑扑。
rsyslog是linux系統(tǒng)中用來實(shí)現(xiàn)日志功能的服務(wù)览爵。默認(rèn)已經(jīng)安裝,并且自動啟用镇饮。它的作用是主要用來采集日志蜓竹,不生產(chǎn)日志。
service rsyslog restart
重啟rsyslog储藐。cat /var/logs/cron.log
查看日志
查看日志俱济,填坑
- 最常見的錯誤,
No MTA installed, discarding output
Jan 9 11:20:01 yocn-MECHREVO CRON[26176]: (yocn) CMD (/bin/bash /home/yocn/crontab/a.sh)
Jan 9 11:20:01 yocn-MECHREVO CRON[26173]: (CRON) info (No MTA installed, discarding output)
MTA(Mail Transfer Agent):英特網(wǎng)郵件傳輸代理邑茄,轉(zhuǎn)發(fā)來自MUA的信件給指定的用戶的程序姨蝴。
如果沒有郵件的需求,可以通過添加一個重定向的文件來解決, 比如:
# 空輸出null
/bin/bash /home/yocn/crontab/a.sh > /dev/null 2>&1
# 或者你自己系統(tǒng)上的一個目標(biāo)文件肺缕,比如下面的/home/yocn/crontab/out.log
/bin/bash /home/yocn/crontab/a.sh > /home/yocn/crontab/out.log
- 改了之后發(fā)現(xiàn)還是不work左医,再check一下路徑和權(quán)限。
路徑最好使用絕對路徑并檢查權(quán)限同木,這里包括crontab里面配置的重定向的文件和a.sh里記錄執(zhí)行的log文件浮梢。
chrontab來調(diào)用shell比較特殊,隨時check新添加或者修改的目標(biāo)文件是否有權(quán)限運(yùn)行彤路。
yocn@yocn-MECHREVO:/etc/rsyslog.d$ /bin/bash /home/yocn/crontab/a.sh > /home/yocn/crontab/out.log
/home/yocn/crontab/a.sh: 行 3: run.txt: 權(quán)限不夠
yocn@yocn-MECHREVO:/etc/rsyslog.d$ /bin/bash /home/yocn/crontab/a.sh > /home/yocn/crontab/out.log
chmod: 無法訪問 'run.txt': 沒有那個文件或目錄
/home/yocn/crontab/a.sh: 行 3: run.txt: 權(quán)限不夠
yocn@yocn-MECHREVO:/etc/rsyslog.d$ /bin/bash /home/yocn/crontab/a.sh > /home/yocn/crontab/out.log
yocn@yocn-MECHREVO:/etc/rsyslog.d$ service cron restart
可以在調(diào)用之前給加一下權(quán)限秕硝。
- 記得修改完之后調(diào)用
service cron restart
參考連接:
https://blog.csdn.net/lifulian318/article/details/122167549