cronjobはランアウェイプロセスを監視して終了します。

cronjobはランアウェイプロセスを監視して終了します。

私はRunway Roubyプロセスを持っています。これをトリガーする方法を正確に知っています。

要点は、制御できないプロセス(CPU使用量またはメモリ使用量)について考えることになったことです。

  • cronを使用してランアウェイプロセスを監視する方法は? grep /top/ulimit?


  • これが発生した場合は、コマンドラインでユーザーに通知できますか

  • Monitの代替案は何ですか?

答え1

あなたはそれを使用することができますとても良い便利です。主な焦点は動的プロセスの再構成にありますが、ランアウェイプロセスを終了するオプションもあり、設定が簡単です。

答え2

より伝統的なアプローチは厳格な制限を課すことですulimit。これはフォーク爆弾を防ぐことができます。 Marcel Stimbergが述べたように、Veryniceは同様のユーティリティですが、質問に含まれるメモリ使用量を制限するのではなく、良い値にのみ焦点を当てています。

答え3

以下は、CPU時間が3時間以上のすべてのプロセスを見つけて終了するスクリプトです。最初のawkコマンドはプロセスをフィルタリングします。ここにルートが所有していないプロセスがあります。まず、すべてのプロセスに終了信号(-TERM)を送信して正常に終了するように要求します。 3秒後も生きていれば相互作用なく殺します(-KILL)。

#!/bin/tcsh

# Get a list of all processes that are not owned by root
set processes = `ps -ef --no-headers | awk '($1 != "root") {print $2}'`

# Iterate over the list of processes and set TERM signal to all of them
foreach process ($processes)
    # Get the CPU time of the current process
    set cputime = `ps -p $process --no-headers -o cputime | tail -n 1`
    # Convert the CPU time to hours
    set cputime_hours = `echo $cputime | awk -F: '{print $1+0}'`
    # If the CPU time is greater than 3 hours, kill the process
    if ($cputime_hours >= 3) then
        kill -TERM $process
    endif
end

# Give them time to exit cleanly
if (${%processes} > 1) then
    sleep 3
endif

# Kill those that are left
foreach process ($processes)
    # Get the CPU time of the current process
    set cputime = `ps -p $process --no-headers -o cputime | tail -n 1`
    # Convert the CPU time to hours
    set cputime_hours = `echo $cputime | awk -F: '{print $1+0}'`
    # If the CPU time is greater than 3 hours, kill the process
    if ($cputime_hours >= 3) then
        kill -KILL $process
    endif
end

たとえば、rootとしてファイルを作成します/root/kill-old-processes。たとえば、次のように実行可能にします。

chmod 750 /root/kill-old-processes

rootその後、(as)を呼び出してcrontabに追加できますroot

crontab -e

最後に次の行を追加します。

4,9,14,19,24,29,34,39,44,49,54,59  * * * * /root/kill-old-processes >> /var/log/kill-old-processes.log 2>&1

この特定の行は、1日の1時間ごとに指定された分に5分ごとにスクリプトを実行します。

簡単な説明:シェルスクリプトはを使用しますtcsh。まだインストールしていない場合は、シェルをインストールしてください。

関連情報