私は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
。まだインストールしていない場合は、シェルをインストールしてください。