Я создал задание Cron для запуска сценария, который проверяет, запущен ли процесс, в случае, если он это делает, просто печатает, что процесс запущен, если нет, он печатает out процесс не запущен и перезапустите процесс:
#!/bin/sh
SERVICE="start_server.py"
if ps -ef | grep "$SERVICE" | grep -v grep >/dev/null
then
echo "start_server.py is running"
else
echo "start_server.py stopped"
python2.7 start_server.py &
fi
Как пользователь Ubuntu я создал следующее задание cron, запустив - crontab -e
* * * * * /home/ubuntu/mislaka/check_process.sh 2>&1 /home/ubuntu/mislaka/script_log.log
По какой-то причине он не работает или не записывает вывод в журнал файл.
Пытался перезапустить службу cron, попытался создать задание cron от имени пользователя root, изменил все права доступа и пользователя, который запускает сценарий, но ничего не работает.
Скрипт, если я запустил его сам по себе, работает должным образом.
Версия Ubuntu:
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.2 LTS
Release: 20.04
Codename: focal
Заранее спасибо
Проблема заключалась в том, что мне нужно было изменить свой сценарий и отредактировать задание cron, чтобы запустить правильный сценарий и добавить полный путь к сценарию.
Задания, выполняемые через cron
или сценарии запуска systemd
, не выполняются в той же среде выполнения, что и на вашем рабочем столе. Сценарии запуска systemd
запускаются от имени root
. Ни одно из изменений вашего PATH
или других настроек переменных среды не распространяется автоматически на ваше задание cron
. Например, нет $ DISPLAY
, поэтому программы с графическим интерфейсом требуют особого обращения (прочтите man xhost
).
Можно установить переменные среды для всех своих cron
заданий в файле crontab
Прочитать man 5 crontab
.
Посмотрите на результаты echo "=== id ==="; id; echo "=== set ==="; set; echo "=== env ==="; env | sort; echo "=== alias ==="; alias
в каждой из ваших сред.
Поскольку часть команды
в строке crontab
по умолчанию интерпретируется как / bin / sh
, который имеет более простой синтаксис, чем / bin / bash
, я рекомендую использовать command
как вызов сценария bash
(исполняемый, смонтированный, начинается с #! / bin / bash
), который настраивает среду, а затем вызывает нужную программу.