日期:2014-05-16  浏览次数:20722 次

crontab中使用ssh的问题
Red Hat Enterprise Linux Server release 5.5 (Tikanga)
2.6.18-194.el5 #1 SMP Tue Mar 16 21:52:39 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

需求:定期在多台机器上面执行shell操作(以/sbin/ifconfig这个命令为例子)。
我的作法:
设置crontab
*/1 * * * * . /etc/profile; . ~/.bash_profile; . ~/.bashrc; . /etc/bashrc; /usr/bin/perl /home/Keithlan/test/a/env.pl >>/home/Keithlan/test/a/my_log.txt

/home/Keithlan/test/a/env.pl 内容为:
#!/usr/bin/perl -w
print `/usr/bin/ssh 10.10.2.xx '/sbin/ifconfig'`;

远程的机器key文件都已经设置正确。不需要交互式登录。
注:这个脚本手动执行没有问题,但是放在crontab中就不能成功。


经过几次测试发现,crontab中的环境变量与我手动执行的环境变量不一样。如:
[Keithlan@dbbak10-001 a]$ env | grep SSH
SSH_CLIENT=192.168.200.25 49201 22
SSH_TTY=/dev/pts/1
SSH_AUTH_SOCK=/tmp/ssh-ETFTvz3773/agent.3773
SSH_CONNECTION=192.168.200.25 49201 10.10.8.35 22
PROMPT_COMMAND={ msg=$(history 1 | { read x y; echo $y; }); logger -p local5.info "$HOSTNAME [HIST] : $SSH_CLIENT : $PWD : $msg"; }


但是在crontab中没有这些变量。

请问大家是如何解决的?









------解决方案--------------------
要不要执行一下 . ~/.profile