私のスケジュール:
* * * * * ~/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
通常、1つが必要です。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
(およびあなたのシェルスクリプト)はインタラクティブを使用しません。PATH
変える。設定することを検討する必要があります。明らかにスクリプト(またはcrontab
)から。バラより環境(7)。