![crontab - 不記錄?我怎樣才能做對呢?](https://rvso.com/image/1126787/crontab%20-%20%E4%B8%8D%E8%A8%98%E9%8C%84%EF%BC%9F%E6%88%91%E6%80%8E%E6%A8%A3%E6%89%8D%E8%83%BD%E5%81%9A%E5%B0%8D%E5%91%A2%EF%BC%9F.png)
我一直在尋找問題的答案,但找不到正確的答案。所以我自己試試看。
我有一個 Ubuntu 伺服器並嘗試建立一個 TeamSpeak3 伺服器 - 使用登入功能檢查檔案。該腳本應該每小時由 cronjob 自動啟動。
我的檢查腳本(selfcheck.sh):
#!/bin/bash
cd /home/teamspeak/s01
LOGFILE='/home/teamspeak/s01/mylog.selfcheck'
function logg(){
echo -n `date +\%d.\%m.\%Y` `date +\%H:\%M:\%S` >>$LOGFILE
echo " | `basename $0` $1" >>$LOGFILE
}
#COMMANDLINE_PARAMETERS="${1}" #add any command line parameters you want to pass here
DIR=/home/teamspeak/s01/
USER=teamspeak
logg "### GESTARTET ###"
if [ -e ts3server.pid ]; then
if ( kill -0 $(cat ts3server.pid) 2> /dev/null ); then
echo ""
echo " ###################"
echo " #Server is running#"
echo " ###################"
echo ""
status=1
echo "`date +\%d.\%m.\%Y` `date +\%H:\%M:\%S` | Server is running" >>$LOGFILE
else
echo ""
echo " ###########################"
echo " #Server seems to have died#"
echo " ###########################"
echo ""
status=2
echo "`date +\%d.\%m.\%Y` `date +\%H:\%M:\%S` | Server seems to have died" >>$LOGFILE
fi
else
echo ""
echo " ##########################"
echo " #The server isn't running#"
echo " ##########################"
echo ""
status=3
echo "`date +\%d.\%m.\%Y` `date +\%H:\%M:\%S` | The server isn't running" >>$LOGFILE
fi
if [ $status = "2" ]; then
echo ""
echo " ##############"
echo " #Status ist "$status"#"
echo "`date +\%d.\%m.\%Y` `date +\%H:\%M:\%S` | Status ist "$status >>LOGFILE
echo " ###RE-START###"
echo "`date +\%d.\%m.\%Y` `date +\%H:\%M:\%S` | RE-START" >>LOGFILE
echo " ##############"
echo ""
echo ""
echo " ######################"
echo " #Stopping the Server!#"
echo "`date +\%d.\%m.\%Y` `date +\%H:\%M:\%S` | Stopping the Server!" >>LOGFILE
echo " ######################"
echo ""
./ts3server_startscript.sh stop inifile=ts3server.ini
echo ""
echo " ######################"
echo " #Starting the Server!#"
echo "`date +\%d.\%m.\%Y` `date +\%H:\%M:\%S` | Starting the Server!" >>LOGFILE
echo " ######################"
echo ""
./ts3server_startscript.sh start inifile=ts3server.ini
fi
logg "### BEENDET ###"
exit 0
現在我的 crontab 條目:
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11
# m h dom mon dow command
*/1 * * * * /home/teamspeak/s01/selfchek.sh >> /home/teamspeak/s01/cronlog
該 crontab 正在加載,但「cronlog」檔案中沒有輸出。它是空的。我的“mylog.selfcheck”也沒有輸出。但是,如果我手動執行腳本(selfcheck.sh),則會輸出「mylog.selfchek」。
我很抱歉我的髒話......你知道這句話......
我希望任何人都可以幫助我。
答案1
如果你設定 cron */1 * * * *
cron 將每分鐘運行一次。將 cron 設定* */1 * * *
為按小時運行。
編輯完後重啟cron
sudo service cron restart
檢查 cron 工作如何運行
crontab -l | grep -v '^#' | cut -f 6- -d ' ' | while read CMD; do eval $CMD; done
就像你知道的日誌可以檢查
less /var/log/syslog | grep cron
編輯1
根據您的評論 cron 工作。您還說,當您運行腳本時,您已在LOGFILE='/home/teamspeak/s01/mylog.selfcheck'
腳本中定義的日誌檔案中輸出。好的。
mylog.selfcheck
您不會從中看到相同的內容cronlog
。然後像您已經一樣設定 cron 來運行腳本selfchek.sh
並在 cron 中添加第二個命令以將內容mylog.selfcheck
從cronlog
* */1 * * * cat /home/teamspeak/s01/mylog.selfcheck >> /home/teamspeak/s01/cronlog
最終的 cron 代碼
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11
# m h dom mon dow command
* */1 * * * /home/teamspeak/s01/selfchek.sh
* */1 * * * cat /home/teamspeak/s01/mylog.selfcheck >> /home/teamspeak/s01/cronlog