由crontab执行expect脚本问题引发的--crontab环境变量问题
2010-11-03 17:43
519 查看
手头上有一个远程重启目标服务器上进程的expect脚本,SHELL下单独执行时一切都OK,但是添加到cron任务中时执行却不能工作。部分代码如下:
expect脚本:(/data/home/restart_expect)
#!/usr/bin/expect
spawn ssh -p xxx root@xxx.xxx.xxx.xxx
#expect "*root's password*"
expect "*Tencent:*"
send "sh some remote scripts"
send "exit/n"
expect eof exit 0
crontab任务:
*/5 * * * * /data/monitor/new_itil_dicts/syn_tcms_data/run_syn.php /tmp/test.log 2>/dev/null
shell下单独执行一切没有问题,放到cron中却不行,开始定位问题。以下是整个过程:
1. 首先修改crontab的任务错误输出到一个执行文件
*/5 * * * * /data/monitor/new_itil_dicts/syn_tcms_data/run_syn.php /tmp/test.log 2>&1
2.查看文件/tmp/test.log上的错误输出提示如下
找不到命令 ssh,这就让我有点纳闷,为啥会找不到 ssh命令(我装在/usr/local/bin目录下)呢,echo $PATH /usr/local/bin目录明明就在PATH中,这时想到是不是cron用的环境变量和shell的不一样,于是google之,发现cron在/etc/crontab中有如下内容:
SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
MAILTO=root
#
# check scripts in cron.hourly, cron.daily, cron.weekly, and cron.monthly
#
注意这里PATH变量发现ssh安装目录并不在这个上面,到这里就知道原来是cron和shell使用不同的PATH变量导致的问题。所以解决办法可以是:
1. 修改/etc/crontab的PATH变量,使包含expect中使用的命令如ssh
SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin:/usr/local/bin
MAILTO=root
2. expect脚本使用命令的完整路径如,
#!/usr/bin/expect
spawn /usr/local/bin/ssh -p xxx root@xxx.xxx.xxx.xxx
#expect "*root's password*"
expect "*Tencent:*"
send "sh some remote scripts"
send "exit/n"
expect eof exit 0
expect脚本:(/data/home/restart_expect)
#!/usr/bin/expect
spawn ssh -p xxx root@xxx.xxx.xxx.xxx
#expect "*root's password*"
expect "*Tencent:*"
send "sh some remote scripts"
send "exit/n"
expect eof exit 0
crontab任务:
*/5 * * * * /data/monitor/new_itil_dicts/syn_tcms_data/run_syn.php /tmp/test.log 2>/dev/null
shell下单独执行一切没有问题,放到cron中却不行,开始定位问题。以下是整个过程:
1. 首先修改crontab的任务错误输出到一个执行文件
*/5 * * * * /data/monitor/new_itil_dicts/syn_tcms_data/run_syn.php /tmp/test.log 2>&1
2.查看文件/tmp/test.log上的错误输出提示如下
找不到命令 ssh,这就让我有点纳闷,为啥会找不到 ssh命令(我装在/usr/local/bin目录下)呢,echo $PATH /usr/local/bin目录明明就在PATH中,这时想到是不是cron用的环境变量和shell的不一样,于是google之,发现cron在/etc/crontab中有如下内容:
SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
MAILTO=root
#
# check scripts in cron.hourly, cron.daily, cron.weekly, and cron.monthly
#
注意这里PATH变量发现ssh安装目录并不在这个上面,到这里就知道原来是cron和shell使用不同的PATH变量导致的问题。所以解决办法可以是:
1. 修改/etc/crontab的PATH变量,使包含expect中使用的命令如ssh
SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin:/usr/local/bin
MAILTO=root
2. expect脚本使用命令的完整路径如,
#!/usr/bin/expect
spawn /usr/local/bin/ssh -p xxx root@xxx.xxx.xxx.xxx
#expect "*root's password*"
expect "*Tencent:*"
send "sh some remote scripts"
send "exit/n"
expect eof exit 0
相关文章推荐
- 由crontab执行expect脚本问题引发的--crontab环境变量问题
- 在crontab中执行python脚本系统环境变量问题
- ssh连接远程主机执行脚本的环境变量问题
- crontab执行python脚本,没有读取root的环境变量
- ssh连接远程主机执行脚本的环境变量问题
- crontab无法执行-环境变量问题
- [ 转载 ] ssh连接远程主机执行脚本的环境变量问题
- crontab启动shell脚本的环境变量问题
- crontab启动shell脚本的环境变量问题
- jenkins 执行sh脚本 没携带环境变量,报错command not founds问题
- 执行远程服务器上的脚本失败?(环境变量引起的问题)
- ssh连接远程主机执行脚本的环境变量问题
- Linux下通过crontab调度脚本时脚本所使用的环境变量问题
- 控制shell脚本执行频率、解决shell脚本不能修改环境变量等问题
- 在java.ext.dirs中使用环境变量导致crontab执行不成功的问题及解决
- Crontab任务执行脚本source无法获取环境变量
- crontab 中 python(cx_Oracle)脚本执行时需要用户环境变量,怎么办??
- Crontab 不执行的可能原因:环境变量设置问题或是登录帐号问题。
- 有crontab中的脚本不执行,需要在脚本里面export各种环境变量
- crontab中使用环境变量的方法(手动执行shell脚本可以,在定时任务中不行)