-1

長くなってすみません、以下は私のマシンの関連する「env」変数です

HOSTNAME=localhost.localdomain
SHELL=/bin/bash
TERM=xterm-256color
HISTSIZE=1000
SUDO_USER=subhasish
SUDO_UID=500
USERNAME=root
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
MAIL=/var/spool/mail/subhasish
PWD=/backup
LANG=en_US.UTF-8
SHLVL=1
SUDO_COMMAND=/bin/su
HOME=/root
LOGNAME=root
LESSOPEN=|/usr/bin/lesspipe.sh %s
SUDO_GID=500
G_BROKEN_FILENAMES=1
_=/bin/env

私のシェルスクリプトはルーターにログインして情報を取得するだけで、

#!/bin/sh 
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
export DISPLAY=:0.0

host=**********
port=23
login=*********
passwd=*******
passwd2=*******
cmd="term len 0"
cmd2="sh clock"
cmd3="sh ip accounting"

(echo open ${host} ${port}
sleep 1
echo ${login}
sleep 1
echo ${passwd}
sleep 1
echo en
sleep 1
echo ${passwd2}
sleep 1
echo ${cmd} 
sleep 1
echo ${cmd2}
sleep 1 
echo ${cmd3}
sleep 5
echo exit) | telnet >> file.txt

sed '/telnet/,/term len 0/d' file.txt >> file2.txt
mv file2.txt file.txt

これはスタンドアロンでは問題なく動作しますが、crontab では動作を拒否しています。

crontab -l
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
*/2 * * * * /bin/sh /backup/telnet.sh

tail -f /var/log/cron を実行すると、cron が実行されていることが示されますが、file.txt は生成されません。手動で実行すると file.txt を取得します。

Feb 11 23:26:01 localhost CROND[29053]: (root) CMD (/bin/sh /backup/telnet.sh)
Feb 11 23:28:01 localhost CROND[29074]: (root) CMD (/bin/sh /backup/telnet.sh)

crontab が実際に機能するかどうかをテストするために、正常に機能する crontab から 2 行以下を実行しました。

#* * * * * touch /backup/testing.txt
#* * * * *  /backup/test.sh

where test.sh is,
cat test.sh
#!/bin/sh
touch /backup/testing.txt

私は crontab からのエコーは不可能かもしれない、つまり * * * * * /bin/echo "Hello, world!"動作しないかもしれないと考えましたが、* * * * * /bin/echo "Hello, world!" >> /backup/test.out出力は test.out になります。しかし、ここでは echo がスクリプト内にあり、問題にはなりません。

4

1 に答える 1

2

次のような行を考慮に入れてください。

sed '/telnet/,/term len 0/d' file.txt >> file2.txt
mv file2.txt file.txt

cronジョブにはあまり適していません。絶対パスを設定する必要があります。そうしないと、すべてが/に保存されます。

私が提案するのは、これを変更することです。

sed '/telnet/,/term len 0/d' /dir/to/your/file/file.txt >> /dir/to/your/file/file2.txt
mv /dir/to/your/file/file2.txt /dir/to/your/file/file.txt
于 2013-02-12T12:53:07.343 に答える