[Mac] 開啟 cron job 的記錄檔
今天在 Mac 上的 cron job 上,加了下面一行,
想說讓它自動打開 urmoney 的網頁來記帳:
open "http://www.urmoney.tw/ztw/members/finance_02_idx.php?page=1&txtRange=$(date "+%Y-%m")&pProperty=&"
不過奇怪的是,設定了之後,網頁一直沒有被開起來,
可是直接在 terminal 裡面執行又可以…
原本在後面加上 2>&1 > /tmp/urmoney.log 想說看看有沒有錯誤訊息,
可是這個檔案也一直沒有被建立出來…
在下面這篇找到了解法~
Ask Different: Where is the cron log file in MacOSX Lion?
可以先打開 cron job 的 log,這樣問題就比較好查了~
1. 編輯 /etc/syslog.conf
在這個檔案裡加上下面一行 (記得要 sudo 後才能編輯):
cron.* /var/log/cron.log
2. 重新啟動 syslogd
執行下面的兩行指令,重新指動 syslod:
sudo launchctl unload /System/Library/LaunchDaemons/com.apple.syslogd.plist sudo launchctl load /System/Library/LaunchDaemons/com.apple.syslogd.plist
3. 檢查 /var/log/cron.log
等 cron job 的時間到了之後,應該就能看到 /var/log/cron.log 了,
檢查一下內容:
Sep 5 11:04:00 localhost /usr/sbin/cron[15073]: (testuser) CMD (open "http://www.urmoney.tw/ztw/members/finance_02_idx.php?page=1&txtRange=$(date '+)
嗯… 真奇怪, 記錄檔裡記錄的指令,
只到 date ‘+ 而已,後面的 %Y-%m… 都沒出現,
可是在 shell 裡面這個命令卻是可以執行的~
猜測是 % 這個符號造成的問題,不過我懶得的去看 cron job 應該要如何跳脫特殊字元了,
直接把 open 的指令寫在另一個 shell script 裡面,
cron job 呼叫這個 shell script 就好了~
改好的 crontab 內容如下:
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin #MIN HOUR DAY MONTH DAYOFWEEK COMMAND 00 23 * * * ~/open_urmoney.sh
而被呼叫的 open_urmoney.sh 的內容就是剛剛 open 的那一行:
#!/bin/sh open "http://www.urmoney.tw/ztw/members/finance_02_idx.php?page=1&txtRange=$(date "+%Y-%m")&pProperty=&"
設定好之後,cron job 時間到時,urmoney 的網頁正確的被開啟了,
看一下 /var/log/cron.log 的內容,
可以看到剛剛編輯 cron job 的這個動作 (crontab -e) 有被記錄下來,
因此出現了 REPLACE, END EDIT, RELOAD 這三行,
而最後被執行到時,也出現了 CMD 那一行,
這樣就能確認 open_urmoney.sh 有被執行到了:
Sep 5 11:09:36 localhost crontab[15323]: (testuser) REPLACE (testuser) Sep 5 11:09:36 localhost crontab[15323]: (testuser) END EDIT (testuser) Sep 5 11:10:00 localhost /usr/sbin/cron[214]: (testuser) RELOAD (tabs/testuser) Sep 5 11:10:00 localhost /usr/sbin/cron[15381]: (testuser) CMD (~/open_urmoney.sh)
這個開啟 cron job 的 log 的功能真的是相當有用喔~^^