サーバーを再起動するときにバックグラウンドで同時に実行する必要がある5つのPHPファイルがあります。各ファイルは少なくとも4回実行する必要があります。
現在、スクリプト全体を端末に手動で貼り付けてEnterキーを押します。
これが正しいアプローチですか、それともこれを達成するより良い方法がありますか?
nohup php /var/myapp/send-mail.php > /var/log/myapp-log/mail.1.log &
nohup php /var/myapp/send-mail.php > /var/log/myapp-log/mail.2.log &
nohup php /var/myapp/send-mail.php > /var/log/myapp-log/mail.3.log &
nohup php /var/myapp/send-mail.php > /var/log/myapp-log/mail.4.log &
...
...
nohup php /var/myapp/send-push.php > /var/log/myapp-log/push.1.log &
nohup php /var/myapp/send-push.php > /var/log/myapp-log/push.2.log &
nohup php /var/myapp/send-push.php > /var/log/myapp-log/push.3.log &
nohup php /var/myapp/send-push.php > /var/log/myapp-log/push.4.log &
ただし、この方法で実行すると、次のような複数のメッセージが返り始めます。
/push.4.log &ignoring input and redirecting stderr to stdout
nohup: ignoring input and redirecting stderr to stdout
nohup: ignoring input and redirecting stderr to stdout
nohup: ignoring input and redirecting stderr to stdout
[1] Exit 255 nohup php /var/myapp/another-script.php > /var/log/myapp-log/listener.1.log
[6] Exit 255 nohup php /var/myapp/send-mail.php > /var/log/myapp-log/mail.1.log
[7] Exit 255 nohup php /var/myapp/another-script.php > /var/log/myapp-log/listener.2.log
[12] Exit 255 nohup php /var/myapp/send-mail.php > /var/log/myapp-log/mail.2.log
[13] Exit 255 nohup php /var/myapp/another-script.php > /var/log/myapp-log/listener.3.log
[18] Exit 255 nohup php /var/myapp/send-mail.php > /var/log/myapp-log/mail.3.log
[19] Exit 255 nohup php /var/myapp/another-script.php > /var/log/myapp-log/listener.4.log
これらのバッチスクリプトを正しく実行するにはどうすればよいですか?
答え1
a 2>&1
上記のstderrをstdoutにリダイレクトしてみてください。たとえば、各行の末尾に追加します。
nohup php /var/myapp/send-push.php > /var/log/myapp-log/push.1.log 2>&1
これにより問題が解決します。ただし、再起動後に自動的に起動することをお勧めします。 systemd(またはそのOSのサービスマネージャ)を見てください。