Cronjob различные поведения

Я создал cronjob следующим образом для запущения скрипта. Сценарий запустил сервис, только если он снизился.

Вот сценарий,

#!/bin/bash
service=influxdb

if (( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 ))
then
echo "$service is running!!!"
else
service $service start
fi

Я создал задание крона как это,

alphauser@AlphaServer:~$ sudo crontab -e

И затем добавил эту строку

* * * * * bash /home/alphauser/influx-start.sh > /home/alphauser/output-influx-start.txt

Я сохранил вывод в файле только для проверки его вывода.

Сервис остановился, и теперь это было время для крона для проявления его волшебства. Но этому не удалось запустить сервис. Я видел выходной файл, и это было записано в этом,

Starting influxdb...
influxdb process was unable to start [ FAILED ]

затем я удалил этот cronjob из sudo crontab -r.

Я добавил эту строку в конце etc/crontab файл т.е.,

* * * * * root bash /home/alphauser/influx-start.sh > /home/alphauser/outputinflux.txt

и это работало. Сервис запустился, и Это было выводом,

influxdb is running!!!

Я хочу знать это, почему это перестало работать с sudo crontab -e но это работало с etc/crontab файл.

Аутентификация sudo не может быть проблемой, потому что я включил его sudo crontab и случайно если бы это имело бы место, сказало бы это You must be root to run this script.

2
задан 21 November 2017 в 19:53

1 ответ

Как @steeldriver замеченный: service управляйте сбоями, потому что это не находится в crontab путь. Как раз когда корень, crontab задания, выполненные в среде, которая справедливо ограничивается с точки зрения переменных окружения. Необходимо включать полный путь многих исполняемых файлов в команде, которая должна быть выполнена кроном.

В этом случае, поэтому,

/usr/sbin/service $service start

работал бы. Как мы знаем, каков точный тракт исполняемого файла? Сделать which service и это ответит /usr/sbin/service.

Однако service команда продвигается и быть замененным systemd эквивалентный systemctl. Вы сделали бы systemctl start $service в терминальной команде. Даже без sudo, systemctl выяснит, что это не работает как корень, и попросите Ваш sudo пароль.

В crontab Вы использовали бы полный путь для systemctl утилита, которая является /bin/systemctl.

Так, если Вы используете

/bin/systemctl start $service

это должно работать.

5
ответ дан 2 December 2019 в 01:55

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

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