cron:运行一个进程,但前提是它没有运行?

11 linux cron

有没有办法让我告诉 cron 运行一个应用程序,但如果一个进程已经存在就不要运行它?

Ric*_*lka 24

最简单的方法,使用 pgrep

在 crontab 中:

* * * * * pgrep processname > /dev/null || /path/to/processname -args0 -args1
Run Code Online (Sandbox Code Playgroud)

  • 不,您不能在 cronjob 中将 -f 标志与 pgrep 一起使用。原因是您将匹配用于运行 cronjob 本身的 shell 脚本。 (6认同)

har*_*ymc 9

运行脚本,而不是直接运行程序。有很多可能性。例如 :

MYPROG="myprog"
RESTART="myprog params"
PGREP="/usr/bin/pgrep"
# find myprog pid
$PGREP ${MYPROG}
# if not running
if [ $? -ne 0 ]
then
   $RESTART
fi
Run Code Online (Sandbox Code Playgroud)


Lin*_*000 8

如果前一个实例尚未完成,此脚本将不会再次运行。如果您不想在另一个特定进程正在运行时运行某些程序,请参阅 harrymc 的脚本。

DATE=`date +%c`;
ME=`basename "$0"`;
LCK="./${ME}.LCK";
exec 8>$LCK;

if flock -n -x 8; then
  echo ""
  echo "Starting your script..."
  echo ""

[PUT YOUR STUFF HERE]

  echo ""
  echo "Script started  $DATE";
  echo "Script finished `date +%c`";
else
  echo "Script NOT started - previous one still running at $DATE";
fi
Run Code Online (Sandbox Code Playgroud)


Den*_*son 3

您可以在脚本中使用锁定文件,但请参阅进程管理

flock是一种可以使用的实用程序。