2

私は Linux が初めてで、単一の Linux サーバーを実行し続けることを継承しています。これは私たちの SVN サーバーなので、比較的重要です。

私の前にそれを維持していた人が、実行中の svnserve プロセスが多すぎる場合にメールを送信する cron タスクを持っていたことが判明しました。

質問の最初の部分は、私が実行していることを考えると、

ps -fu cvsuser

プロセスのリストを取得します。今日ではない STIME を持つプロセスを強制終了するにはどうすればよいですか? たとえば、次のようなもの

kill where STIME = Oct30

もう1つの質問は、これらのぶら下がっているsvnserveプロセスを回避する方法を知っている人はいますか? (これが他の質問です。)

4

5 に答える 5

3

インフラストラクチャの再設計を提案するリスクを冒して、svnserveの代わりにApacheとmod dav svnを使用して素晴らしい結果が得られました。Apacheのhttpdは、過去10年ほどの本番環境での使用後はかなり防弾です。

于 2008-11-04T17:45:27.203 に答える
3

楽しみのために (GNU bash、バージョン 3.2.39)

ps h -u cvsuser -o pid,start   # h - no header, only output pid and start
    | grep -v ':'              # exclude entries from the last 24 hours
    | egrep -o '^\ *[0-9]+'    # get the pid (handling possible leading space)
    | xargs -i echo kill "{}"  # pretend to kill - take out the echo if you're happy

これは、'man ps' STANDARD FORMAT SPECIFIERS の以下に依存します。

プロセスが開始されてから 24 時間以内の場合、出力形式は "HH:MM:SS" になり、それ以外の場合は " mmm dd" (mmm は 3 文字の月名) になります。

于 2008-11-04T18:17:55.920 に答える
1

私たちの cvs/svn/git サーバーでは、 の出力に依存して古いプロセスを探す cronjob を使用するのではなくps、プログラムを使用しましたtimeout

$ grep server /etc/xinetd.d/svnserve
server          = /usr/bin/timeout
server_args     = 12h /usr/bin/svnserve -i -R -r /svnroot

「12h」をサイトの適切なタイムアウトに置き換えます(ただし、ほとんどの人が単一のレポをチェックアウトするのに12時間以上かかるとは想像できません)

于 2011-12-26T09:10:27.040 に答える
0

プロセスを識別して強制終了するには:

ps h -u csvuser -o pid,lstart | grep 'May 29' | sed 's/^ \+//' | 
cut -d ' ' -f 1 | xargs -n 1 kill

psコマンドは、csvuserが所有するすべてのプロセスを検索し、pidと開始時刻を出力します。

16324 Thu May 29 04:02:06 2008
22144 Tue Jul 22 04:02:05 2008
11315 Wed Oct  8 04:02:00 2008

grepコマンドは、探している日付を検索します

16324 Thu May 29 04:02:06 2008

sedコマンドは、カットの先頭のスペースを削除します。

cutコマンドは、最初のフィールドのみを出力します。

16324

また、xargsコマンドは、引数としてpidを渡す行ごとにkillコマンドを1回実行します。必要に応じてgrepステートメントを置き換えて、必要なものと一致させます。

svnserveプロセスが適切に終了しない理由については、わかりません。Subversionサーバーでこれを確認したことがないので、別の質問を開く必要があります。

于 2008-11-04T17:48:04.857 に答える
0

頭のてっぺんから、私は次のようなことをします:

ps -fu ユーザー名 | awk '$5 !~ /[0-9]:[0-9]/ { print $2 }' | xargs kill

ps 出力の 5 番目のフィールドは、月/日 (Oct31 など) を含み、時刻 (12:32 など) を含まない 1 日前のプロセスを示すため、awk を使用した正規表現は、5 番目のフィールドがまだ時刻であるプロセスを単純に除外します。おそらく間違っていると思いますが、ps は 24 時間以上実行されているプロセスの日付のみを表示し始めると思います。

于 2008-11-04T17:40:59.240 に答える