У меня есть сервер Ubuntu, где я положил ядро приложения. Это баночка, которую нужно всегда прислушиваться к запросам. Я сделал скрипт для запуска с правильными параметрами.

Сценарий похож на это: расположение скрипта: /home/andrea/core/script.sh

script.sh принимает параметр "start" или "stop" в зависимости от того, что мне нужно сделать.

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

crontab -e
*/5 * * * * /home/andrea/core/testscriptalive.sh

где testscriptalive.sh - это:#!/ Бен / Баш

# Check if core is running
if [ ! -f /tmp/core.pid ]; then 
  cd /home/andrea/core/
  ./script.sh start
  ./email.sh
fi

Итак, каждые 5 минут cron запускает скрипт «testscriptalive.sh», который в основном проверяет, есть ли правильный PID, а если нет, запускает снова ядро и отправляет мне электронное письмо. Пока все хорошо. Что мне нужно сделать, это: если я хочу остановить ядро по причинам X, как я могу остановить выполнение задания cron без его редактирования вручную? Например, если через 5 минут через консоль я ввожу «./script stop», задание cron автоматически перезапускает его, даже если я этого не хочу. Мне нужны два сценария sh для подключения к моим параметрам "start" и "stop", которые:

Начните:

checks if the job is correctly stored in cron, if not adds it

стоп:

removes the job from cron

Как мне этого добиться?

Спасибо

3 ответа3

1

Вам нужно добавить проверку в процедуру остановки script.sh: Если script.sh запускается из оболочки (не cron) -> создайте какой- нибудь файл /tmp/stop.tmp и удалите этот файл в процедуре запуска.

Таким образом, testscriptalive.sh также должен проверить, существует ли /tmp/stop.tmp ...

0

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

crontab /path/to/MyCronJobs.txt

Это перезапишет crontab с заданиями в текстовом файле.

0

Лучшее решение, которое я нашел для таких нужд, это добавить блокировку ко всем моим таким скриптам, например:

if [[ -f "/tmp/$0.lock" ]]; then
  echo "$0 is locked.  Bailing."
  exit 0
else
  touch "/tmp/$0.lock"
fi
# the rest of the script goes here
rm -f "/tmp/$0.lock"

Когда это будет в моих сценариях, я могу вручную touch /tmp/scriptname.lock чтобы разместить файл блокировки, когда я хочу запретить запуск задания cron - cron все равно запустит скрипт, но скрипт увидит свой файл блокировки прервать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .