crontabを使ってワインを実行することはできませんか?

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/shPOSIXと正確に互換性がないかもしれませんが、「bourne」に近いです)!

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

wine通常、1つが必要です。X11サーバーはウィンドウを表示します。そして、プログラムは通常、起動にcronX11サーバーや端末を必要としません。したがって、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(およびあなたのシェルスクリプト)はインタラクティブを使用しません。PATH変える。設定することを検討する必要があります。明らかにスクリプト(またはcrontab)から。バラより環境(7)

関連情報