Я создал 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
.
Как @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
это должно работать.