私の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
ジョブから)。DISPLAY
Xlibただし、Xvfbを使用することもできます。ここ。
やっと、pgrep(1)スキャンプロセスです。単独で使用するps aux | grep "D2GS"
か、使用方法を学習してくださいpgrep
。
またはecho something > /dev/stderr
より良いものを使用することをお勧めします。echo
printf(1)(適切なリダイレクション) またはロガー(1)少なくともデバッグの目的で、スクリプト内のいくつかの場所に記述します。
wine
そして、少なくともデバッグフェーズでは、stderrとstdoutをリダイレクトしません/dev/null
。少なくとも一時的にデバッグ中) 、 次のようなページャーでwine "C:/D2GS/D2GS.exe" >> /tmp/wine.out 2>&1
調べます。/tmp/wine.out
less
あなたのcron
(そしてあなたのシェルスクリプト)はインタラクティブなPATH
変数設定することを検討してください明示的にスクリプト(またはcrontab
)で環境(7)。