crontab
が停止している場合、それを開始するようにnginx
を作成しようとしています。
私はググってこれら二つのスクリプトを見つけた
#!/bin/bash
service=replace_me_with_a_valid_service
if (( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 ))
then
echo "$service is running!!!"
else
/etc/init.d/$service start
fi
どういうわけか手動で実行した場合、source scriptName
サービスを停止していても、crontab
に追加した後、エコーし続けるnginx is running
およびサービスを開始しません。
その後、デジタルオーシャンで別のスクリプトを見つけました
#!/bin/sh
ps auxw | grep nginx | grep -v grep > /dev/null
if [ $? != 0 ]
then
/etc/init.d/nginx start > /dev/null
fi
もう一度手動で実行すると機能しますが、ユーザーのパスワードを要求されます
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to start 'nginx.service'.
Authenticating as: abc,,, (abc)
パスワードを入力した後==== AUTHENTICATION COMPLETE ===
はnginx
を表示して開始します
次に、スクリプトをcrontabに追加します...この権限エラーが発生します
Failed to start nginx.service: Interactive authentication required.
誰か私がこれを修正する方法を知っていますか?
アドバイスを事前にありがとう。
あなたが使用しようとしていたそれらのスクリプトは時代遅れであり、systemdを備えた最新のシステムでは使用すべきではありません。
代わりに次のようなスクリプトを試してください。
#!/bin/bash
if ! systemctl is-active nginx >/dev/null ; then
systemctl start nginx
fi
しかし、それはひどく厄介なハッカーとおそらく必要ないので、 beforeあなたがそれをする、試してみてください systemdがnginxを自動的に再起動する もしそうなら停止します。 systemdドロップイン でそれを行います:
[Service]
Restart=always
ファイル/etc/systemd/system/nginx.service.d/override.conf
として配置します(存在しない場合はディレクトリを作成します)。 systemctl edit nginx
を使用してファイルを作成することもできます。
そしてもちろん、systemdドロップインを作成するか、このスクリプトをcrontabに配置することは、ルートとして実行する必要があります(長時間実行するルートシェルの場合はSudo -i
を使用してください)。
これをcron経由で実行しないでください。
Nginx自体は非常に安定しており、理由なくサービスを停止するだけではありません。ただし、アプリケーションを使用して不安定にすることもできます。アプリケーションが不安定な場合は、try-restart
毎時、毎日、毎週、何でも。
Cronが起動するまで約30秒待機するよりも停止は少なくなります。高トラフィックが発生した場合に不安定な状態が発生しても、夜間に再起動できます。
おそらく、メンテナンスのためにnginxを停止し、作業の途中でcronが開始することに驚かされる可能性があります。
環境が非常に不安定な場合は、ペースメーカークラスターについて検討してください。
また、アプリケーションのバグを修正するための作業/専門家なので、1か月はハングアップしたり、死んだりすることなく実行できます。