長くなってすみません、以下は私のマシンの関連する「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 がスクリプト内にあり、問題にはなりません。