これは長い投稿なので、事前に質問してください(TLDRスタイル):元のスクリプトを完全に終了させながら、スクリプトのバックグラウンドプロセスとして2つのチェーンコマンド(つまり、cmd1; cmd2)を開始するより良い方法はありますか?
これと同様の質問が3年前に尋ねられましたが、それは私のニーズをカバーしていませんでした。この質問は、スクリプトの終了時にバックグラウンドプロセスを開始することで最終的に回答されました。スクリプトが終了した後、このバックグラウンドプロセスを開始する必要があります。
完全に実行して終了するためにスクリプトが必要な状況がありますが、スクリプトが終了した後、2つのバックグラウンドタスクを実行するためのスクリプトが必要です。
タスクは次のとおりです。
sleep 5
service proprietaryAgent restart
スリープは、元のスクリプトが終了する時間を与えるためだけにあります。したがって、このコマンドは、スクリプトの終了時に実行される可能性があると思います。摩擦は、「proprietaryAgent」です。このエージェントは、スクリプトをリモートで実行できるようにするメカニズムです。そのため、スクリプト中に再起動すると問題が発生します。バックグラウンドジョブを開始して終了するスクリプトを実行する必要があります。そのバックグラウンドジョブは、基本的に「少し待ってから(元のスクリプトが完全に終了するまで)、このエージェントを再起動する」必要があります。
私はもう試した:
sleep 5;service proprietaryAgent restart &
disown
exit 0
そして私は試しました:
nohup sleep 5;nohup service proprietaryAgent restart &
exit 0
ロジックがそこで失敗するのは確かです。フォアグラウンドプロセスとしてスリープを開始すると、スクリプトは「sleep 5」呼び出しを所有し、スリープが完了するまで終了しません。これにより、スクリプトが終了するときに、proprinativeAgentが再起動します。ただし、この質問の要件は、proclusiveAgentが、終了中または終了前ではなく、スクリプトの終了後に開始する必要があることです。
私も試しました:
trap "nohup sleep 5;nohup service proprietaryAgent restart &" 0
exit 0
しかし、トラップは終了を検出し、キックオフしてから完全に実行します。その後、スクリプトを完全に終了します。だからそれはうまくいきませんでした。
だから私が試したグーバーのように:
nohup sleep 5 &;nohup service proprietaryAgent restart &
exit 0
私はこれが何をするのか正直に知りません。試してみました。しかし、この文脈では(私は思う)睡眠はそれ自体がバックグラウンドプロセスであり、連鎖「;」から切り離されています。これにより、次のコマンドが待機します。
最後に、これを試しました(基本的に、スクリプトに2番目のスクリプトを記述させ、バックグラウンドで開始します)。
echo "#!/bin/bash" > /var/tmp/restartAgent.sh
echo "sleep 5" >> /var/tmp/restartAgent.sh
echo "service proprietaryAgent restart" >> /var/tmp/restartAgent.sh
chmod 755 /var/tmp/restartAgent.sh
nohup /var/tmp/restartAgent.sh &
exit 0
まだトラブルシューティングが必要ですが、私はここに近いと思いますが、元の質問に戻ります。私がこれに取り組むべき「より良い」方法はありますか?
最後に試したことがうまくいくはずです。コマンドを別のファイルに書き込むことをバイパスして、代わりに次のようなことを行うことができます。
nohup bash -c "sleep 10 ; service opsware-sas restart opswgw" &
もう1つのオプションは、at
コマンドを使用して将来のジョブをスケジュールすることです。例えば:
at -f /path/to/script.sh now + 1 minute
service opsware-sas restart opswgw
事前に作成されたコマンド(または親スクリプトによって作成された一時的なスクリプト)を呼び出す外部スクリプトが必要になります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加