2017-02-09 1 views
-1

私はこのコードを使ってcronjobをcrontabに書き込むPHPコードを持っています。PHPを使って一時ファイルに書き込まずにcrontabに書き込む方法

 $output = shell_exec('crontab -l'); 

     file_put_contents('/tmp/crontab.txt', $output . $command . PHP_EOL . PHP_EOL); 
     exec('crontab /tmp/crontab.txt'); 

これは100%よく機能します。しかし問題は、多くのユーザーがアプリケーションにアクセスするため、ファイルが上書きされないことです。もし上書きされなければ、私は他の問題があると確信しています。

私の質問は、cronの内容を一時ファイルに書き込まずに、単一のコマンドを使ってcrontabに書き込む/追加する方法です。

echo "cron here" > crontabのようなものを試しましたが、動作しませんでした。

+0

複数のユーザーが同時にこのコードを使用する可能性がある場合は、スレッドセーフにして、セッションIDを.txtファイルの名前に追加してみてください。しかし、あなたは正しいです、任意の一時ファイルを使用しない解決策がなければなりません:) – Random

+0

'file_get_content'を使ってファイルを読み込んだ後、ファイルに書き直すだけですか? – bugscoder

+0

@Randomはいこれを行うには、単一のBASH/Shellコマンドが好きです。一時ファイルを書き込むのではなく、 – Umair

答えて

1

正直なところ、これらのconcurenceの編集をcrontabに何回行うことができますか?私はこの場合に何らかの種類のロック機構を好むだろう。たとえば、ユーザーがファイルを開いたときに.lockファイルを作成し、編集が完了した後に.lockファイルを削除します。別のユーザーがcrontabを編集していて、.lockが存在する場合、彼は許可されません。

+0

2行のプロセスはちょっと実行が短いので、2人のユーザーが同時に.lockファイルを書き込むと、.lockファイルを使って同じconcurenceの問題が発生します。 – Random

+0

@ランダムあなたは正しいです...私はまだ解決策について考えています:P – Umair

+0

/tmp/crontab.txtをインポートする操作だけを.lockすることを意味するわけではありませんが、上記のアプリケーションでcronの編集プロセス全体(私が正しく理解していれば)です。たとえば、20人のユーザーが同じものを追加するときに、どのように状況を管理したいのですか? –

関連する問題