crontab会定时启动脚本,而不管原来的脚本是否执行完毕,这在某些情况下是不能容忍的,详见http://blog.csdn.net/totuswhf/archive/2008/05/08/2416424.aspx.
于是我写了个脚本cron_music.sh,其中判断是否已经启动,如果启动则直接退出:
#!/bin/sh
. $HOME/.cronprofile
PROCEXIST=""
PROCEXIST=`ps -ef|grep cron_music|grep -v grep|wc -l`
if(test $PROCEXIST -ge 2)
then
echo "program already exist!" >>$HOME/cron/cron_music.log
return;
fi;
sleep 120
在命令行下执行,试验没有问题。
放到crontab中死活就不会执行了。把PROCEXIST打印出来一看,执行一个计数已经是2,接着把`ps -ef|grep cron_music|grep -v grep`作为独立语句写到文件中,看到果然有两个进程,一个是sh -c path/cron_music.sh, 一个是/bin/sh cron_music.sh.
原来是因为crontab会先执行一个sh -c,然后才执行到要执行的脚本。
因此这个判断,要至少是ge 3才行。如果有两个程序要启动,计数是4。