crontab を使用して wine を実行できませんか?

crontab を使用して wine を実行できませんか?

私のcrontab:

* * * * * ~/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 がプロセスを開始していない」と「プロセスは開始したが、想定どおりに動作しない」を区別する必要があります。また、ファイルが実行可能であることを確認してください。

~私が想定していたのとは対照的に、 inの使用はcrontab問題ではありません。コマンド文字列全体がシェルに渡されます。

答え2

動作しない可能cd ~性があります(チルダ展開は普遍的ではありません。cd $HOMEそれを優先してください(これは、...のすべての実装で同じことを保証します/bin/sh).....POSIX sh(または/bin/sh)は一般的にない bash(そして、あなたのものは/bin/sh完全に POSIX に準拠しているわけではないかもしれませんが、より「bourne」に似ています)!

もちろん、pwd > /dev/stderrスクリプトに次のようなものを追加することもできます (デバッグ目的のため)。

wine一般的にはX11サーバーから起動したプログラムは、cron通常、X11サーバーやターミナルを必要としません。そのため、おそらく 起動wineに失敗します(cronジョブから)。DISPLAYXlibただし、Xvfbを使用することもできます。ここ

やっと、pgrep(1)スキャンプロセスです。単独で使用するps aux | grep "D2GS"か、使用方法を学習してくださいpgrep

またはecho something > /dev/stderrより良いものを使用することをお勧めします。echoprintf(1)(適切なリダイレクション) またはロガー(1)少なくともデバッグの目的で、スクリプト内のいくつかの場所に記述します。

wineそして、少なくともデバッグフェーズでは、stderrとstdoutをリダイレクトしません/dev/null。少なくとも一時的にデバッグ中) 、 次のようなページャーでwine "C:/D2GS/D2GS.exe" >> /tmp/wine.out 2>&1調べます。/tmp/wine.outless

あなたのcron(そしてあなたのシェルスクリプト)はインタラクティブなPATH変数設定することを検討してください明示的にスクリプト(またはcrontab)で環境(7)

関連情報