当前位置: 技术问答>linux和unix
crontab定时启动、关闭中出现的奇怪问题!帮忙看一看!谢谢!
来源: 互联网 发布时间:2015-12-10
本文导语: 目标:现在有一个名为test的可执行程序,需要定时启动,定时关闭! 写了一个实现关闭、启动的脚本,名为all.sh 基本思想:检查此刻是否有test进程,有则kill,没有则启动。 内容如下: ---------------------------------...
目标:现在有一个名为test的可执行程序,需要定时启动,定时关闭!
写了一个实现关闭、启动的脚本,名为all.sh
基本思想:检查此刻是否有test进程,有则kill,没有则启动。
内容如下:
-----------------------------------------------------------------
#!/bin/bash
pscount=`ps -ax | grep test | grep -v grep | wc -l`
count=1
if [ "$pscount" -lt "$count" ]
then
cd /home/oracle/
./test &
else
killall -9 test
fi
-----------------------------------------------------------------
单独测试该脚本,没开启test的情况下可将test启动。在test运行情况下也可以将test关闭。
以root身份用vi写文件xx
-----------------------------------------------------------------
31 16 * * * /home/oracle/all.sh
32 16 * * * /home/oracle/all.sh
-----------------------------------------------------------------
再用crontab xx 将上两句话写入crontab中,用crontab -l 浏览 ,crontab 里加入了上两句话
在16点31分前运行test。
结果:16点31分 test进程被kill了
16点32分test没有被启动
测试情况1:为了测试“32 16 * * * /home/oracle/all.sh”有没有运行,操作如下:
先启动tset ,等到16点31分 test进程被kill后立刻手动启动test,等到16点32分test又被kill了。说明第二句话运行了。
测试情况2 :在16点31分前关闭test,等到16点35分也没见test启动。
测试情况3 :以oracle身份重新编写相同脚本和crontab文件。并在oracle身份下重新进行定时启动、关闭测试。效果非常理想。
请问 为什么root身份下启动不了 test 呢?怎么解决这个问题呢?
谢谢! :)
写了一个实现关闭、启动的脚本,名为all.sh
基本思想:检查此刻是否有test进程,有则kill,没有则启动。
内容如下:
-----------------------------------------------------------------
#!/bin/bash
pscount=`ps -ax | grep test | grep -v grep | wc -l`
count=1
if [ "$pscount" -lt "$count" ]
then
cd /home/oracle/
./test &
else
killall -9 test
fi
-----------------------------------------------------------------
单独测试该脚本,没开启test的情况下可将test启动。在test运行情况下也可以将test关闭。
以root身份用vi写文件xx
-----------------------------------------------------------------
31 16 * * * /home/oracle/all.sh
32 16 * * * /home/oracle/all.sh
-----------------------------------------------------------------
再用crontab xx 将上两句话写入crontab中,用crontab -l 浏览 ,crontab 里加入了上两句话
在16点31分前运行test。
结果:16点31分 test进程被kill了
16点32分test没有被启动
测试情况1:为了测试“32 16 * * * /home/oracle/all.sh”有没有运行,操作如下:
先启动tset ,等到16点31分 test进程被kill后立刻手动启动test,等到16点32分test又被kill了。说明第二句话运行了。
测试情况2 :在16点31分前关闭test,等到16点35分也没见test启动。
测试情况3 :以oracle身份重新编写相同脚本和crontab文件。并在oracle身份下重新进行定时启动、关闭测试。效果非常理想。
请问 为什么root身份下启动不了 test 呢?怎么解决这个问题呢?
谢谢! :)
|
应该是环境变量的问题
crontab 启动的shell环境中 大部分搜索路径都不可用
如果你的test中依赖当前的搜索路径 应该提前告诉它或者是使用全路径
比如 如果你的test是一个 shell 脚本 最好是在前边加上 /bin/bash 来执行 test 脚本
crontab 启动的shell环境中 大部分搜索路径都不可用
如果你的test中依赖当前的搜索路径 应该提前告诉它或者是使用全路径
比如 如果你的test是一个 shell 脚本 最好是在前边加上 /bin/bash 来执行 test 脚本