Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Cron, как предотвратить наложение вызовов скрипта  (Прочитано 822 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Dexel

  • Автор темы
  • Активист
  • *
  • Сообщений: 295
    • Просмотр профиля
Здравствуйте.
Скрипт при первичном запуске работает около 15 минут (включение машины).
Дальнейшие его вызовы - не более 1 минуты, т.е. интервал cron установил 2мин.

Но с таким раскладом, будет происходить накладка при первом вызове.

Можно конечно сделать через .lock файл, а ещё способы есть?
Или может cron не станет вызывать тот же скрипт, если ещё не отработал первичный его вызов?

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Можно поставить в скрипт проверку (например pgrep -с имя_скрипта)— если запущен, то не запускать.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Dexel

  • Автор темы
  • Активист
  • *
  • Сообщений: 295
    • Просмотр профиля
Ага,
started=$(pgrep -c scrname)
[ $started -gt 1 ] && exit 0
Заодно защитит от случайного ручного запуска, когда висит на кроне.
Спасибо.

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
pgrep scrname || exit
scrname
Wars ~.o

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Dexel,
Почему -gt 1 ? Тогда уже -ge… Но вариант victor00000 правильнее.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Dexel

  • Автор темы
  • Активист
  • *
  • Сообщений: 295
    • Просмотр профиля
Azure, так проверка внутри скрипта - уже 1 процесс
А при вторичном будет 2, сработает exit
started=$(pgrep -c scrname)
[ $started -gt 1 ] && exit 0


А вариант victor00000 нужно в строку CRON прописывать

Вот строка cron сейчас
cd /home/practic/scripts && ./scrname >/dev/null
У меня ж на CRON запуск.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Или может cron не станет вызывать тот же скрипт, если ещё не отработал первичный его вызов?
Станет.

Код: (bash) [Выделить]
pgrep script || /path/to/script.sh
« Последнее редактирование: 13 Августа 2014, 12:09:34 от ArcFi »

Оффлайн Dexel

  • Автор темы
  • Активист
  • *
  • Сообщений: 295
    • Просмотр профиля
Да, всё, понятно
*/2 * * * * pgrep scrname || cd /home/practic/scripts && ./scrname >/dev/null

А переход в директорию нужен потому как в скрипте все пути относительные (исправлюсь).

Спасибо всем.

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Dexel,
*/2 * * * * bash -c 'pgrep scrname || { cd /home/practic/scripts; ./scrname >/dev/null; }'
Wars ~.o

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
А переход в директорию нужен потому как в скрипте все пути относительные
А переход делать внутри скрипта?cd ${0%/*}
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

Страница сгенерирована за 0.068 секунд. Запросов: 25.