3

CRON を使用して PHP スクリプトの単一インスタンスを実行するのに問題があります。おそらく、誰かが何が必要かを説明するのを手伝ってくれるでしょう。現在、PHP インスタンスを呼び出す前に、PHP スクリプトのインスタンスがまだ実行されていないことを確認するためにstartup呼び出されるスクリプトがあります。crontab

crontab -eエントリ:

* * * * * /var/www/private/script.php >> /var/www/private/script.log 2>&1 &

。/起動

#!/bin/bash

if ps -ef | grep '[s]cript';
        then
                exit;
        else
                /usr/bin/php /var/www/private/script.php  >>/var/www/private/script.log 2>&1 &
                echo 'started'
fi

これは機能していないようで、これをデバッグする方法を知るためにログに記録されたエラーを取得できないようです。

4

2 に答える 2

1

これには lockrun を使用できます: http://www.unixwiz.net/tools/lockrun.html

* * * * * /usr/local/bin/lockrun --lockfile=/var/run/script.lockrun -- php /home/script.php

または Perl を使用します。

system('php /home/script.php') if ( ! `ps -aef|grep -v grep|grep script.php`);
于 2012-10-15T19:54:32.433 に答える
0

プロセスのテストは、スクリプトの複数のインスタンスを防止するための最も信頼できる方法ではありません。

ではbash、次のものを使用することをお勧めします。

if ( set -o noclobber; echo "locked" > "$lockfile") 2> /dev/null; then
  trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT
  echo "Locking succeeded" >&2
  rm -f "$lockfile"
else
  echo "Lock failed - exit" >&2
  exit 1
fi

このページには別の例がありますhttp://wiki.bash-hackers.org/howto/mutex

別の解決策( を使用しない場合NFS) は、 を使用することです。Linux flock コマンドを使用して、別のルート プロセスがファイルを削除するのを防ぐにはどうすればよいですか? をflock (1)参照してください。

于 2012-10-15T19:56:58.040 に答える