0

PHP サービスが実行されているかどうかを確認し、必要に応じて開始する bash スクリプトがあります。

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

KP=$(pgrep -P 1 -f script.php)
if [ "X$KP" = "X" ]
    then
        /usr/bin/nohup php /var/www/test/script.php >>/var/www/test/log.txt 2>&1 &
fi

次に、次のエントリをcrontab -e(自分のユーザーとして) に追加しました。

* * * * * /var/www/test/startup >> /var/www/test/cron.log 2>&1 &

cron が実行され、 を見るとそのプロセスがわかりますhtop。ただし、機能していないか、ログに書き込んでいないようです。CPUの0%を使用してそこに座っているだけです。フォルダーの/var/www/test/所有者は my で、ログ ファイルには666アクセス許可があります。

なにが問題ですか?むしろ、何が問題なのかを知るために、エラー ログを機能させるために何を変更できますか?

4

2 に答える 2

1

デバッグ用のものを追加することをお勧めします。考えられる障害は次のとおりです。

ユーザーは実際に/var/www/test/startupスクリプトを実行できますか? ユーザーは に書き込めます/var/www/test/cron.logか? crontab エントリを次のようにすることをお勧めします。

* * * * * /var/www/test/startup

すべての出力 (stdin および stderr) は、ユーザーに電子メールで送信する必要があります (sendmailこのマシンで壊れていない限り)。

はどこpgrepですか?によって設定されたパスにありますかPATH=...。同上php

とは$KP? 書き込み可能であることがわかっているログ ファイルにエコーします。

touch /tmp/mylog
chmod 666 /tmp/mylog

次に、スクリプトで:

echo "I'm getting pgrep from <`type -p pgrep`>" >>/tmp/mylog
echo "KP is now <$KP>" >>/tmp/mylog

プロセスscript.phpはすでに実行中で、PID 1 によって所有されている可能性がありますか?

スクリプトに への書き込み権限がない可能性があり/var/www/test/log.txtます。/var/www/test親ディレクトリのいずれかが書き込み可能または実行可能でない場合は、それがあなたによって所有されているかどうか、または/var/www/test/log.txt666 であるかどうかは問題ではありません。再確認:

if [ ! -w /var/www/test/log.txt ]; then echo "Cannot write to /var/www/test/log.txt"; fi
于 2012-10-02T22:09:20.550 に答える
0

nohupと関係があるのではないかと思います。標準入力が端末である場合にのみ、特別なことを行います。しかし、cronジョブでバックグラウンドプロセスを切り離す必要がないため、なぜこれが違いを生むのかわかりません。

しかし、多分これは役立つでしょう:

(/usr/bin/nohup php /var/www/test/script.php >>/var/www/test/log.txt 2>&1 &)
于 2012-10-02T21:45:29.090 に答える