остановитесь параллельная обработка для крона инициировала процесс

Ваш $opt переменная будет установлена на слово опции, соответствующее числу что вводы данных пользователем. Если Вы хотите посмотреть на то, какой пользователь, на самом деле введенный, посмотрите на $REPLY.

2
02.10.2016, 16:27
2 ответа

Общепринятая практика состоит в том, чтобы использовать изодромный с предварением файл. Каждый раз сценарий выполняется, имейте его, проверяют файл, чтобы видеть, работает ли он уже куда-нибудь. Порядок операций обрисован в общих чертах ниже.

  • считайте pid из /var/run/yourscriptname.pid
  • проверьте, работает ли pid, выход, если это
  • получите свой pid, запишите это в /var/run/yourscriptname.pid
  • выполнитесь как нормальные
  • удалите изодромный с предварением файл

В Вашем случае это сделает, но существуют некоторые случаи, где сценарий можно было бы назвать достаточно быстрым, который во время между проверкой pid и записью pidfile, другой процесс запускает и также не видит pidfile и продолжает выполняться. Можно далее сжать вещи при помощи консультативной блокировки. Это - услуга, которую ОС предоставляет на примерно каждом Unix.

Ссылки:

4
27.01.2020, 22:01

Трудно сказать от Вашего вопроса, если Вы хотите запуститься с нового задания каждый раз или просто пропустить вращение, если это все еще работает.

Если Вы хотите запуститься новый каждый раз, самый простой взлом должен добавить a killall your_command; your_command к Вашему крону.

Иначе попробуйте pgrep you_command || your_command в Вашей строке крона, чтобы только выполниться, если текущий НЕ найден, работая.

Вы могли также стать более необычными и зарегистрировать PID Вашего задания в некотором петлявшем и затем проверить, что петляют для активных заданий перед запуском работы. При нахождении того, можно или выйти и позволить ему работать или уничтожить другой и отметить собственный PID как текущее выполнение того.

0
27.01.2020, 22:01
  • 1
    я хочу пропустить процесс, если экземпляр того же сценария работает. –  Harish Kurup 10.06.2011, 14:14
  • 2
    Затем используйте вторую опцию. pgrep поиски существующего процесса имени и возвращают true, если находит тот. Так как Вы хотите выполнить свою команду, только если ей не удается найти один, используйте || логическая операция ИЛИ для выполнения команды, если pgrep возвращает false. –  Caleb 10.06.2011, 14:32
  • 3
    я попробовал pgrep, но он выполняется, даже если процесс работает, я использовал команду как pgrep php test.php || эхо "уже выполнение.." –  Harish Kurup 16.06.2011, 09:51
  • 4
    Ха Вы problably сталкиваетесь с проблемами, распознающими название процесса, потому что Вы называете его от интерпретатора. Вместо этого установите hashbang в своем сценарии к правильному значению для Вашего пути к php и выполните его использование ./test.php. Необходимо смочь к prgrep для этого намного легче. –  Caleb 16.06.2011, 23:28

Теги

Похожие вопросы