Crontab没有运行带有echo命令的shell脚本,尽管工作正常

时间:2013-02-12 12:17:38

标签: shell echo crontab

很抱歉这么久,下面是我机器上相关的'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

我的shell脚本只需登录路由器并获取信息

#!/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是脚本内部,应该不是问题。

1 个答案:

答案 0 :(得分:2)

考虑以下几行:

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

对于cronjob来说不是很好:你需要放置绝对路径,否则一切都会保存在/.

我建议改变它:

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