0

正常に動作し、出力を画面に表示する簡単なスクリプトを書いています。その出力を変数の1つにちなんで名付けられたファイルにリダイレクトしたいのですが、出力のない空のファイルを作成し続けます。

基本的に、リストされている各ユーザーのcrontabエントリを確認し、出力をファイルの名前がサーバー名であるファイルにリダイレクトしたいと考えています。


servers=`cat hosts.txt`
for i in $servers;
do
    echo $i
    users=`ssh $i cut -d ":" -f1 /etc/passwd`
    for n in $users
    do
        crontab -u $n -l > $i-test.txt
    done 
done

ファイル<servername>-test.txtは作成されますが、そこからの出力crontab -u $n -l はありませんが、画面に表示されます。

任意の助けをいただければ幸いです。

ありがとう

4

1 に答える 1

0

その都度内容を上書きしていてhostname-text.txt、最後のユーザーがシステムアカウントかcrontabを持たない他のユーザーの場合、ファイルは空になります。

その間、すべてのユーザーに対して crontab のエラー出力「no crontab for ...」が表示されます。これは stderr に出力されるためです。

修正は、何をしたいかによって異なります。エラー情報とともに、ループ全体をリダイレクトする小さな修正を次に示します。

servers=`cat hosts.txt`
for i in $servers;
do
    echo $i
    users=`ssh $i cut -d ":" -f1 /etc/passwd`
    for n in $users
    do
        echo "Crontab for $n:"
        ssh "$i" crontab -u $n -l 
        echo
    done > "$i-test.txt" 2>&1
done

myhost-test.txtこれにより、次のようなものを含むファイルが得られます

Crontab for user:
0 * * * * foo
0 4 * * * bar

Crontab for mysql:
no crontab for mysql

(これは、スペース、引用符、および効率性の問題を無視して、コードに厳密に固執することを優先します。)

于 2013-09-10T22:46:43.070 に答える