Linuxシステムで実行されているプロセスを一時停止して後で再起動する方法はありますか?

Linuxシステムで実行されているプロセスを一時停止して後で再起動する方法はありますか?

ファイルをコンピュータにコピーする必要があります。そしてそのデータは非常に膨大です。現在、サーバーには通常のサービスが必要で、特定の忙しい時間帯があることがよくあります。もしそうなら、サーバーが忙しい時間に達したときにプロセスを一時停止し、範囲外で再起動するようにこのようなコマンドを実行する方法はありますか?

予想される結果

cp src dst

if time between 9:00-14:00 pause process
After 14:00 resume cp command.

ベストアンサー1

SIGSTOPシグナルを送信してからシグナルを送信してプロセスの実行を一時停止できますSIGCONT

ワークロードが単一のプロセス(バックグラウンドで実行されるフォークヘルパーなし)であると仮定すると、次のように使用できます。

# start copy in background, store pid
cp src dst &
echo "$!" >/var/run/bigcopy.pid

それから忙しい時間が始まったら、以下を送ってくださいSIGSTOP

# pause execution of bigcopy
kill -STOP "$(cat /var/run/bigcopy.pid)"

後でサーバーがアイドル状態になったら、再起動してください。

# resume execution of bigcopy
kill -CONT "$(cat /var/run/bigcopy.pid)"

実行したい特定の時間をスケジュールする必要があり、cronやsystemdタイマー(または他の同様のツール)などのツールを使用してスケジュールできます。時間間隔に基づいてスケジュールするのではなく、サーバーを監視して(負荷の平均、CPU使用率、またはサーバーログのアクティビティの確認など)、複製の一時停止/再開のタイミングを決定できます。

また、PIDファイルを管理し(使用する場合)、レプリカが一時停止される前に実際に実行されていることを確認し、レプリカが完了した後にPIDファイルを削除してクリーンアップする必要があります。

つまり、信頼できるようにするには、これを中心に構築するためにもっと必要がありますが、プロセスの実行を一時停止/再開するためにこれらの信号SIGSTOPSIGCONT信号を使用する基本的なアイデアがあなたが探しているようです。

おすすめ記事