Задание Cron не выполняется в Ubuntu 20.04.2 LTS

Я создал задание 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

Заранее спасибо

1
задан 13 July 2021 в 10:05

2 ответа

Проблема заключалась в том, что мне нужно было изменить свой сценарий и отредактировать задание cron, чтобы запустить правильный сценарий и добавить полный путь к сценарию.

0
ответ дан 28 July 2021 в 11:21

Задания, выполняемые через 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 ), который настраивает среду, а затем вызывает нужную программу.

1
ответ дан 28 July 2021 в 11:21

Другие вопросы по тегам:

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