这周装服务器,系统,应用都OK后,发现有的crontab脚本中的命令无法执行,苦思了两天,还是以下提供的建议解决了我的问题。
最近碰到一个问题,shell脚本直接运行和crontab设置好定时运行的结果不一样,郁闷.
脚本是向远端数据库写入记录,直接运行可以在远端写入记录,而在crontab中定时,脚本是已经执行了,可是并没有向远端数据库写入记录.
2008-1-17 11:25
merlin852
贴你的脚本看看
2008-1-17 11:30
waker
环境不同
2008-1-17 11:41
xmbbx
|
/etc/crontab:
20 */1 * * * root /root/check.sh
/var/log/cron:
Jan 17 08:20:00 ns000 CROND[8594]: (root) CMD (/root/check.sh)
Jan 17 09:20:00 ns000 CROND[8621]: (root) CMD (/root/check.sh)
Jan 17 10:20:00 ns000 CROND[8648]: (root) CMD (/root/check.sh)
Jan 17 11:20:00 ns000 CROND[8675]: (root) CMD (/root/check.sh)
cat /root/check.sh:
#!/bin/bash
>/root/temp.txt
tcpdump -nnnv udp >>/root/temp.txt &
time_for_check=`date "+%R" -d'1 minute'`
sleep 120
killall tcpdump
data=`grep "$time_for_check" /root/temp.txt|grep "53:"|wc -l`
getip=`ip a|grep eth0|awk 'END{print $2}'|cut -d'/' -f1`
hostname=`hostname`
mysql -h 222.*.*.* -u user -p password databaes -e "insert into data values ('','$hostname','$getip','$data',now())"
[ 本帖最后由 xmbbx 于 2008-1-17 11:44 编辑 ]
2008-1-17 11:52
galford433
mysql的环境加到cron里面。或者用绝对路径/usr/bin/mysql ?
tcpdump最好也用绝对路径。
[ 本帖最后由 galford433 于 2008-1-17 11:54 编辑 ]
tcpdump最好也用绝对路径。
[ 本帖最后由 galford433 于 2008-1-17 11:54 编辑 ]
2008-1-17 12:40
gucuiwen
[size=7]
一招必杀:
在脚本最前面加上一句:
source ~/.bash_profile
这样运行环境就一摸一样了。加上这句后,直接执行能成功的脚本放在crontab里都能执行。
[/size]
在脚本最前面加上一句:
source ~/.bash_profile
这样运行环境就一摸一样了。加上这句后,直接执行能成功的脚本放在crontab里都能执行。
[/size]
2008-1-17 12:43
gucuiwen
所有的crontab问题只有两种可能,
1,环境
2,路径
而第二种问题往往又是第一种问题引起的,所以加上环境后,.bash_profile里的环境后99%的问题都一招通杀。
[size=5] .bash_profile会读取.bashrc
.bashrc 会读取 /etc/bashrc
/etc/bashrc 会读取 /etc/profile
[/size]
一个linux所有的系统用户,所有的环境变量,都逃不出以上几个文件。(前提是你用bash)
1,环境
2,路径
而第二种问题往往又是第一种问题引起的,所以加上环境后,.bash_profile里的环境后99%的问题都一招通杀。
[size=5] .bash_profile会读取.bashrc
.bashrc 会读取 /etc/bashrc
/etc/bashrc 会读取 /etc/profile
[/size]
一个linux所有的系统用户,所有的环境变量,都逃不出以上几个文件。(前提是你用bash)
2008-1-17 13:24
xmbbx
感谢楼上的各位,确实是环境(路径)的问题,已经解决.
gucuiwen解释的很清楚,非常感谢.
gucuiwen解释的很清楚,非常感谢.