我的計劃表:
* * * * * ~/d2gs.sh
我的應用程式:
#!/bin/sh
#
# D2GS
#
# Go to the directory
cd ~
# Run the applications
if ! ps aux | pgrep "D2GS"; then
wine "C:/D2GS/D2GS.exe" > /dev/null 2>&1 &
fi
crontab 沒有啟動該進程。這很奇怪,因為我可以手動成功運行 ~/d2gs.sh 。
答案1
您必須區分「crontab 未啟動該進程」和「該進程確實啟動但未執行其應有的操作」。並確保該文件是可執行的。
與我假設的相反,使用~
incrontab
不是問題。整個命令字串被傳遞到 shell。
答案2
可能cd ~
不起作用(因為波形符擴充不是通用的)。更喜歡cd $HOME
它(保證對/bin/sh
...的所有實現都做同樣的事情).....請記住,POSIX sh
(或/bin/sh
)通常是不是 bash
(你的/bin/sh
可能不完全符合 POSIX,但更像“bourne”)!
當然,您可以pwd > /dev/stderr
在腳本中添加類似的內容(用於偵錯目的)。
wine
一般需要一個X11伺服器來顯示視窗。而一個程式啟動時cron
一般不需要任何X11伺服器或終端機。所以wine
可能無法(從你的cron
工作開始)。您可能需要設定一些DISPLAY
變數擴充庫。但你可能會使用 Xvfb,請參閱這裡。
終於,pgrep(1)正在掃描進程。要么單獨使用ps aux | grep "D2GS"
,要么學習如何使用pgrep
。
我建議使用echo something > /dev/stderr
或更好echo
或列印(1)(用合適的重定向) 或者記錄器(1)在您的腳本中,至少出於調試目的(在多個地方)。
至少在調試階段我不會將wine
-s stderr 和 stdout 重定向到。/dev/null
你不能編碼嗎(至少暫時地在調試期間) 並 使用一些尋呼機wine "C:/D2GS/D2GS.exe" >> /tmp/wine.out 2>&1
進行研究,例如?/tmp/wine.out
less
你的cron
(和你的 shell 腳本)沒有使用你的交互PATH
多變的。你應該考慮設置它明確地在你的腳本中(或crontab
)。看環境(7)。