私はもう少しLinuxを学ぼうとしています。経験から、壁に頭をぶつけてみるのが最善の方法です。手動でタスクを数回実行したので、自動化したいと思います。これには、いくつかのタスクを強制終了するためのワンライナーを作成して、それらを再起動できるようにすることが含まれます。
現在、私は以下を使用しています。
for i in `ps aux | egrep "[c]ouchpotato|[s]abnzbd|[s]ickbeard|[d]eluge|[n]zbhydra"|awk '{print $2, $11, $12}'`; do echo $i; done
重要なのは、forループを実行するとすぐに、awkから取得した行が分割されるということです。
ランニング ps aux | egrep "[c]ouchpotato|[s]abnzbd|[s]ickbeard|[d]eluge|[n]zbhydra"|awk '{print $2, $11, $12}'
私が探している結果を私に与えます、すなわち:
27491 /usr/local/couchpotatoserver-custom/env/bin/python /usr/local/couchpotatoserver-custom/var/CouchPotatoServer/CouchPotato.py
27504 /usr/local/deluge/env/bin/python /usr/local/deluge/env/bin/deluged
27525 /usr/local/deluge/env/bin/python /usr/local/deluge/env/bin/deluge-web
27637 /usr/local/nzbhydra/env/bin/python /usr/local/nzbhydra/share/nzbhydra/nzbhydra.py
27671 /usr/local/sabnzbd/env/bin/python /usr/local/sabnzbd/share/SABnzbd /SABnzbd.py
28084 /usr/local/sickbeard-custom/env/bin/python /usr/local/sickbeard-custom/var/SickBeard/SickBeard.py
しかし、それを私のforループに追加すると、次のようになります。
27491
/usr/local/couchpotatoserver-custom/env/bin/python
/usr/local/couchpotatoserver-custom/var/CouchPotatoServer/CouchPotato.py
27504
/usr/local/deluge/env/bin/python
/usr/local/deluge/env/bin/deluged
etc...
私の目標は、$ iに行全体を含めることです-これは可能ですか?また、$ 11と$ 12からgetコマンドのみを使用することは可能ですか? pythonへのパス全体を持っている必要はなく、アプリケーションへのパス全体を持っている必要もありません。
ありがとう!
for
ループ出力は、Wordの境界、つまり空白/改行で分割されていることに注意してください。あなたが望んでいたのは、$i
に含まれる行全体です。
したがって、次の2つのことを行う必要があります。
ワイルドカード展開を無効にします。
set -f;IFS=$'\n'; for i in `.....`;do echo "$i"; done
注:バッククォートを引用しないでください。引用符を付けないと、for
ループに引数の大きなブロブが1つ与えられます。これは、psの出力全体になりますが、それは役に立ちません。
HTH