データベース(ETLプロセスなど)に対してバックエンドスクリプトを実行するサーバーがあります。しかし、私たちは1日2時間ずつ電子メールを送信することに専念しています。電子メールは最優先事項ですが、時にはサーバーのクラッシュ時に多くのメモリとすべてのプロセスを占有します。したがって、電子メールシステムの実行中にすべてのETLスクリプト(Pythonで作成)を一時的に一時停止したいと思います。これが完了したら、電子メールシステムが完了した後にそのスクリプトを再起動したいと思います。
電子メールシステムが3つのクローンで実行され、次の実行可能ファイルがあるとします。
/usr/bin/php /home/Email/main.php --action=set1
/usr/bin/php /home/Email/main.php --action=set2
/usr/bin/php /home/Email/main.php --action=set3
これら3つをスクリプトファイルにまとめることができます。ただし、このスクリプト内では、すべてのPythonスクリプトを一時停止して起動する必要があります。スタック交換を検索すると、次のコマンドを実行できるようです。
kill -TSTP [pid]
/usr/bin/php /home/Email/main.php --action=set1 &
/usr/bin/php /home/Email/main.php --action=set2 &
/usr/bin/php /home/Email/main.php --action=set3 &
wait
kill -CONT [pid]
ここで、pidは私のPythonスクリプトのプロセスIDです(複数のスクリプトがあります)。私の質問は、実行中のすべてのPythonスクリプトのpidを検索し、これを繰り返すようにこれを調整する方法です。注:これはUbuntu 14.04.2で実行されます。他の提案も大変ありがとうございます。ありがとうございます。
解決策
私のシステムの解決策は次のとおりです。
pkill -STOP python
/usr/bin/php /home/Email/main.php --action=set1
/usr/bin/php /home/Email/main.php --action=set2
/usr/bin/php /home/Email/main.php --action=set3
pkill -CONT python
答え1
利用可能なプロセスのPIDを見つけるにはpgrep
あなたの場合に使用できますpkill
。
pkill -TSTP Email
pkill -CONT Email
プロセス名をよりよく一致させるのが賢明かもしれませんが、
答え2
killall
またはpkill
()にチェックしてくださいpgrep
。
しかし、私たちの場合の最善のアプローチは、単純なトランスポート専用のMTAを設定し、メッセージをキューに入れてから、高い優先順位に設定することですnice
(遅いネットワークで作成された接続(もう一方の端のMTAへの初期接続速度が遅い[スパム対策機能])は、残りの速度を遅くすることなく並列に行うことができます。