Скрипты Bash для Cronjob - PullRequest
       17

Скрипты Bash для Cronjob

3 голосов
/ 10 июля 2011

Привет, я пытаюсь использовать экран как часть cronjob.

В настоящее время у меня есть следующая команда:

screen -fa -d -m -S mapper /home/user/cron

Можно ли вообще заставить эту команду ничего не делать, если маппер экрана уже существует? Mapper установлен на полчаса cronjob, но иногда отображение занимает больше получаса, и поэтому они и перекрываются, замедляя друг друга, а иногда даже вызывая медленный следующий, и поэтому я в итоге работает много экранов маппера.

Спасибо за ваше время,

Ответы [ 2 ]

6 голосов
/ 10 июля 2011
ls /var/run/screen/S-"$USER"/*.mapper >/dev/null 2>&1 || screen -S mapper ...

Это проверит, существуют ли какие-либо сеансы экрана с именем mapper для текущего пользователя, и только если ни один из них не запустит новый.

2 голосов
/ 10 июля 2011

Почему вы хотите, чтобы задание выполнялось cron, к которому (по определению) не подключен терминал, чтобы что-то делать с экраном? Согласно Wikipedia , «GNU Screen - это программное приложение, которое может использоваться для мультиплексирования нескольких виртуальных консолей, позволяя пользователю получить доступ к нескольким отдельным сеансам терминала».

Однако, если для этого есть какая-то причина, вам, вероятно, потребуется создать файл блокировки, который процесс проверяет перед продолжением. На этом этапе вам нужно запустить сценарий оболочки из записи cron (что в любом случае обычно является хорошей техникой), и сценарий оболочки может проверить, завершился ли предыдущий запуск задачи, и завершится, если нет. Если предыдущее воплощение завершено, то текущее воплощение создает файл блокировки, содержащий его PID, и запускает задание. Когда он завершается, он удаляет файл блокировки. Вам следует просмотреть команду shell trap и убедиться, что файл блокировки удален, если сценарий оболочки завершается в результате перехватываемого сигнала (вы не можете перехватить KILL и некоторые сигналы управления процессом).

Судя по другому ответу, программа screen уже создает файлы блокировки; вам, возможно, не нужно делать ничего особенного, чтобы создать их - но вам нужно будет определить, существуют ли они. Также проверьте руководство GNU для screen.

...