
我有這個計劃
38 * * * * /bin/bash -l -c 'cd /var/rails/site/releases/20120705144335 && script/rails runner -e qa '\''Play.load_lists'\'''
我在不同的用戶下有這個 cron,所以我切換用戶來部署
sudo su deploy
crontab -e
我看到我的 cron 然後我在 root 用戶下追蹤日誌
tail -n300 -f /var/log/syslog
我看到我的 cron
Jul 5 11:38:01 ip-10-70-75-234 CRON[4971]: (deploy) CMD (/bin/bash -l -c 'cd /var/rails/site/releases/20120705144335 && script/rails runner -e qa '\''Play.load_lists'\''')
Jul 5 11:38:01 ip-10-70-75-234 CRON[4970]: (CRON) info (No MTA installed, discarding output)
但是 cron 要么沒有運行,要么存在權限問題...當我在控制台中運行任務時,它工作得很好,但在 cron 中卻不行...知道我錯過了什麼嗎
這是 Ubuntu 12.04 LTS
也許我可以將更詳細的清單記錄到某個地方以查看錯誤
答案1
CRON 透過本機郵件傳送應用程式的輸出(stdout、stderr)。 Ubuntu 目前顯然沒有預設安裝 MTA(郵件傳輸代理程式)。每當交付失敗時,CRON 都會在系統日誌檔案中列印一條通知:
Jul 5 11:38:01 ip-10-70-75-234 CRON[4970]: (CRON) info (No MTA installed, discarding output)
您可以安裝 MTA,例如 postfix,僅供內部(本地)使用,例如
aptitude install postfix
在安裝過程中,系統會詢問您要使用什麼預設配置。您應該選擇Local only
配置。
此後,您可以使用以下命令找到 CRON 運行的應用程式的輸出
tail -f /var/mail/<your_username>
當然,您也可以使用內建 shell 功能將日誌記錄輸出寫入專用日誌檔案或將輸出通過管道/重定向到檔案...