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

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

  • Windows 7 не может подключиться к Samba share в Linux
  • Как превратить мой нетбук Linux в WiFi AP
  • Операции с дисками заморожены Debian
  • Отобразить свободное пространство файловой системы для пользователя root
  • Как изменить цвет фона экспорта Inkscape по умолчанию с желтого на белый?
  • Изучение основ Linux / Unix
  • Как узнать MAC-адрес моего адаптера WiFi на Ubuntu Linux?
  • Преодоление беспроводных и проводных адаптеров моего ноутбука
  • 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.

    Interesting Posts

    Как диагностировать спонтанную перезагрузку?

    Автоматическая перезагрузка Windows8, если нет активности в Интернете

    Параллельный доступ к NFS

    Скопировать файл из Windows в Linux

    Как использовать второй ПК в качестве расширенного монитора

    Отображение значка «показывать рабочий стол» на клавишу (например, F11)

    Невозможно ввести специальные символы, используя Alt + number в Windows

    Устранить задержку MacBook CapsLock

    Как вы используете больше смайликов в Office Communicator?

    Компьютер выключается и включается после запуска. Затем идет мертвый

    Как получить максимальное разрешение на Ubuntu в Microsoft Virtual PC?

    Как найти компьютер в моей сети, который занимается массовыми рассылками?

    Должен ли я использовать пластиковые / изоляционные шайбы при подключении материнской платы к корпусу?

    Какой инструмент (Fedora) Linux можно использовать для просмотра моего рабочего стола в одной сети с моего ноутбука?

    Photoshop CS4, мой инструмент линии теперь рисует стрелки, как мне вернуть значение по умолчанию и что это такое?

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