当前位置: 技术问答>linux和unix
求救一个关于crontab的问题
来源: 互联网 发布时间:2016-10-17
本文导语: 我在AIX系统中的普通用户下利用crontab定时了几个程序,刚开始可以正常执行,但是机器重启了一次后就不能自动执行了! 我检查过了,crontab中的备份数据库脚本可以正常执行,但是我自己写的程序就不执行! 我查...
我在AIX系统中的普通用户下利用crontab定时了几个程序,刚开始可以正常执行,但是机器重启了一次后就不能自动执行了!
我检查过了,crontab中的备份数据库脚本可以正常执行,但是我自己写的程序就不执行!
我查了一下日志/var/adm/cron/log 发现日志中没有报错,说是执行成功!
这我就郁闷了,我自己执行程序的时候,会在指定目录下生成日志文件,但是我却没有发现crontab执行时生成的日志文件!
哪位高手告诉下,究竟是什么问题!crontab真的执行了吗?
/home/efesa/bin>crontab -e efesa
"/tmp/crontabA4ulya" 28 lines, 1653 characters
0 18 * * * ~/bin/autobakefesa.sh >/dev/null 2>&1 &
1 18 * * * ~/bin/auto_baktsp.sh >/dev/null 2>&1 &
5 18 * * * ~/bin/auto_bakbusi.sh >/dev/null 2>&1 &
10 0 * * * ~/bin/ccds_EndDay >/dev/null 2>&1 &
40 0 * * * ~/bin/ccds_Tranrec2Err >/dev/null 2>&1 &
0 1 * * * ~/bin/ccds_Reconcile >/dev/null 2>&1 &
30 1 * * * ~/bin/ccds_Reconcile_Result >/dev/null 2>&1 &
0 2 * * * ~/bin/ccds_tranrec_his >/dev/null 2>&1 &
39 9 * * * ~/bin/ccds_orgn >/dev/null 2>&1 &
0 3 1 * * ~/bin/ccds_BatchPay >/dev/null 2>&1 &
0 4 1 * * ~/bin/ccds_BatchPay_Result >/dev/null 2>&1 &
这是我的crontab文件,前三个shell脚本可以正常执行,但是后面的程序执行不成功!
efesa : CMD ( ~/bin/ccds_orgn.sh >/dev/null 2>&1 & ) : PID ( 377286 ) : Wed Nov 17 09:39:00 2010
Cron Job with pid: 377286 Successful
efesa : CMD ( ~/bin/ccds_orgn >/dev/null 2>&1 & ) : PID ( 463214 ) : Wed Nov 17 09:42:00 2010
Cron Job with pid: 463214 Successful
这是我的crontab日志,这里说执行成功。程序执行成功后会生成一个日志文件的,但是我没发现生成日志文件!
我检查过了,crontab中的备份数据库脚本可以正常执行,但是我自己写的程序就不执行!
我查了一下日志/var/adm/cron/log 发现日志中没有报错,说是执行成功!
这我就郁闷了,我自己执行程序的时候,会在指定目录下生成日志文件,但是我却没有发现crontab执行时生成的日志文件!
哪位高手告诉下,究竟是什么问题!crontab真的执行了吗?
/home/efesa/bin>crontab -e efesa
"/tmp/crontabA4ulya" 28 lines, 1653 characters
0 18 * * * ~/bin/autobakefesa.sh >/dev/null 2>&1 &
1 18 * * * ~/bin/auto_baktsp.sh >/dev/null 2>&1 &
5 18 * * * ~/bin/auto_bakbusi.sh >/dev/null 2>&1 &
10 0 * * * ~/bin/ccds_EndDay >/dev/null 2>&1 &
40 0 * * * ~/bin/ccds_Tranrec2Err >/dev/null 2>&1 &
0 1 * * * ~/bin/ccds_Reconcile >/dev/null 2>&1 &
30 1 * * * ~/bin/ccds_Reconcile_Result >/dev/null 2>&1 &
0 2 * * * ~/bin/ccds_tranrec_his >/dev/null 2>&1 &
39 9 * * * ~/bin/ccds_orgn >/dev/null 2>&1 &
0 3 1 * * ~/bin/ccds_BatchPay >/dev/null 2>&1 &
0 4 1 * * ~/bin/ccds_BatchPay_Result >/dev/null 2>&1 &
这是我的crontab文件,前三个shell脚本可以正常执行,但是后面的程序执行不成功!
efesa : CMD ( ~/bin/ccds_orgn.sh >/dev/null 2>&1 & ) : PID ( 377286 ) : Wed Nov 17 09:39:00 2010
Cron Job with pid: 377286 Successful
efesa : CMD ( ~/bin/ccds_orgn >/dev/null 2>&1 & ) : PID ( 463214 ) : Wed Nov 17 09:42:00 2010
Cron Job with pid: 463214 Successful
这是我的crontab日志,这里说执行成功。程序执行成功后会生成一个日志文件的,但是我没发现生成日志文件!
|
这是我的crontab日志,这里说执行成功。程序执行成功后会生成一个日志文件的,但是我没发现生成日志文件!
-------------
你确定只要执行脚本 就100%产生日志文件的话 才可靠是否生成日志来判断脚本成功是否成功执行。
在csdn上 crontab不执行 最多的原因是
1.依赖特定的环境变量 比如java变量等 解决方法是在脚本里export一遍环境变量 或者source一下环境变量的设定文件
2.使用了相对路径 解决方法 尽量是用绝对路径
-------------
你确定只要执行脚本 就100%产生日志文件的话 才可靠是否生成日志来判断脚本成功是否成功执行。
在csdn上 crontab不执行 最多的原因是
1.依赖特定的环境变量 比如java变量等 解决方法是在脚本里export一遍环境变量 或者source一下环境变量的设定文件
2.使用了相对路径 解决方法 尽量是用绝对路径
|
转自别人的回答;
1,首先确保sh脚本具有可执行属性
即chmod +x ***.sh
或chmod +777 ***.sh
2,确保sh脚本手工执行正常
即在当前系统内手工执行sh脚本以后能收到自己期望得到的结果
3,加载环境变量
这个问题是经常容易被忽略的问题,通常我们在第二步的时候手动执行脚本能得到自己想要的结果,可是设置好crontab之后,总不能得到自己想要的结果,总感觉脚本没有被执行。或者执行后没有得到正常的结果。很多均是由于没有加载所在用户的环境变量所引起的。因此最好在自己的脚本首两行添加环境变量的导入。如下:其中telstar是我在操作系统下所在的用户。在该目录下执行ls -a可以查看到.cshrc文件。我们在自己的sh脚本中增加source 该文件,将本用户的环境变量加载,那么以下的内容就能正常被执行了
#!/bin/csh#source /telstar/.cshrc
下面贴出我的定时重启tomcat的一个例子
#!/bin/csh#source /telstar/.cshrckill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`cd /telstar/tomcat/binsleep 15./startup.sh &
其实这里不加载环境变量的话,sh前加上绝对路径,应该也可以,这个没有测试,有兴趣的朋友可以尝试一下
#!/bin/csh
#source /telstar/.cshrc
kill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`
sleep 15
/telstar/tomcat/bin./startup.sh &
总之很多手动能正常执行的sh,crontab不能执行大多数情况是由于没有加载环境变量引起的,这里贴出来,以绝后患
#!/bin/csh
#source /telstar/.cshrc
kill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`
cd /telstar/tomcat/bin
sleep 15
./startup.sh &
1,首先确保sh脚本具有可执行属性
即chmod +x ***.sh
或chmod +777 ***.sh
2,确保sh脚本手工执行正常
即在当前系统内手工执行sh脚本以后能收到自己期望得到的结果
3,加载环境变量
这个问题是经常容易被忽略的问题,通常我们在第二步的时候手动执行脚本能得到自己想要的结果,可是设置好crontab之后,总不能得到自己想要的结果,总感觉脚本没有被执行。或者执行后没有得到正常的结果。很多均是由于没有加载所在用户的环境变量所引起的。因此最好在自己的脚本首两行添加环境变量的导入。如下:其中telstar是我在操作系统下所在的用户。在该目录下执行ls -a可以查看到.cshrc文件。我们在自己的sh脚本中增加source 该文件,将本用户的环境变量加载,那么以下的内容就能正常被执行了
#!/bin/csh#source /telstar/.cshrc
下面贴出我的定时重启tomcat的一个例子
#!/bin/csh#source /telstar/.cshrckill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`cd /telstar/tomcat/binsleep 15./startup.sh &
其实这里不加载环境变量的话,sh前加上绝对路径,应该也可以,这个没有测试,有兴趣的朋友可以尝试一下
#!/bin/csh
#source /telstar/.cshrc
kill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`
sleep 15
/telstar/tomcat/bin./startup.sh &
总之很多手动能正常执行的sh,crontab不能执行大多数情况是由于没有加载环境变量引起的,这里贴出来,以绝后患
#!/bin/csh
#source /telstar/.cshrc
kill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`
cd /telstar/tomcat/bin
sleep 15
./startup.sh &