無法使用 crontab 運行 wine?

無法使用 crontab 運行 wine?

我的計劃表:

* * * * * ~/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.outless

你的cron(和你的 shell 腳本)沒有使用你的交互PATH多變的。你應該考慮設置它明確地在你的腳本中(或crontab)。看環境(7)

相關內容