UNIX-判断程序是否已经运行的脚本在crontab与命令行下的不同

来源:互联网 发布:linux reboot无法重启 编辑:程序博客网 时间:2024/05/19 03:44

        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。