Cron: запустить процесс, но только если он не работает?

Есть ли способ для меня сказать cron запустить приложение, но не запустить его, если процесс уже существует?

  • Общие папки / настройки Mac OS для проверки (при попытке избавиться от отвратительного самозапускающегося приложения)
  • Crontab - / bin / sh: wget: команда не найдена
  • Автоматически перезагружать работу Unix, если она опускается?
  • Сценарий Python не работает как cronjob
  • Rsync через SSH с cron в osx-environment
  • Как запустить команду запуска с правами root
  • Как восстановить файловую систему ext4
  • Быстрый способ adduser и userdel на нескольких машинах
  • Почему Windows требует перезагрузки намного больше, чем Linux?
  • Как получить битрейт видео из командной строки в Linux?
  • Как я могу получать телефонные звонки на сервере Linux и скриптах в зависимости от числа нажатых?
  • В чем разница между «su» и дефисом?
  • 5 Solutions collect form web for “Cron: запустить процесс, но только если он не работает?”

    Простейший способ, используйте pgrep

    В кронтабе:

    * * * * * pgrep processname > /dev/null || /path/to/processname -args0 -args1 

    Запустите скрипт, а не непосредственно программу. Есть много возможностей. Например :

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

    Этот сценарий не будет запускаться снова, если предыдущий экземпляр не завершился. Если вы хотите что-то не запускать, если выполняется другой конкретный процесс, см. Скрипт 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 

    Вы можете использовать файл блокировки в своем скрипте, но см. Раздел Управление процессами .

    flock – одна утилита, которую можно использовать.

    Обычно это обрабатывается самой программой, а не cron . Для этого есть два стандартных метода:

    1) grep вывод ps чтобы увидеть, есть ли процесс с тем именем, которое уже запущено

    2) При запуске сначала проверьте наличие файла pid (process id), обычно на /var/run/program_name.pid , и, если он существует, прочитайте pid из файла и проверьте, существует ли этот процесс еще ; Если это так, откажитесь от запуска. Если файл pid не существует или файл pid исчез, создайте файл pid, напишите в него свой идентификатор процесса и продолжайте с обычным запуском.

    Хотя технически можно писать трубы bash, которые будут делать любой из них непосредственно в вашем crontab, лучше добавить их к запущенной программе (чтобы они применимы независимо от того, как она запускается) или написать сценарий оболочки для Рассмотрите это, как предположил harrymc.

    Давайте будем гением компьютера.