Я пытаюсь сделать crontab
начать nginx
если его остановить.
Я погуглил и нашел эти два скрипта
#!/bin/bash
service=replace_me_with_a_valid_service
if (( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 ))
then
echo "$service is running!!!"
else
/etc/init.d/$service start
fi
как-то, если я запускаю его вручную, он отлично работает, делая source scriptName
после того, как я добавлю это в crontab
даже если служба остановлена, она продолжает повторять nginx is running
и не запускает службу.
Потом я нашел еще один сценарий в цифровом океане
#!/bin/sh
ps auxw | grep nginx | grep -v grep > /dev/null
if [ $? != 0 ]
then
/etc/init.d/nginx start > /dev/null
fi
снова, если я запустил его вручную, он работает, но он запросит пароль пользователя
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to start 'nginx.service'.
Authenticating as: abc,,, (abc)
после того, как я ввел пароль ==== AUTHENTICATION COMPLETE ===
покажет и начнет nginx
затем я добавляю скрипт в crontab ... я получаю эту ошибку разрешения
Failed to start nginx.service: Interactive authentication required.
Кто-нибудь знает, как это исправить?
Заранее благодарим за любые советы.
Эти скрипты, которые вы пытались использовать, устарели и не должны использоваться в современной системе с systemd.
Вместо этого попробуйте такой сценарий:
#!/bin/bash
if ! systemctl is-active nginx >/dev/null ; then
systemctl start nginx
fi
Но это некоторые ужасно мерзкий хакерство и наверное не нужно, так перед Вы делаете это, пытаться если systemd перезапустит nginx автоматически если он остановится. Сделайте это с помощью вход в систему:
[Service]
Restart=always
который вы помещаете как файл /etc/systemd/system/nginx.service.d/override.conf
(создание каталога, если он не существует). Вы также можете использовать systemctl edit nginx
для создания файла.
И, конечно же, либо создание systemd drop-in, либо размещение этого скрипта в crontab должно выполняться от имени пользователя root (попробуйте использовать sudo -i
для долго работающей корневой оболочки).
Ни в коем случае не делайте этого через cron.
Сам Nginx очень стабилен, он не просто остановит службу без причины. Однако вы можете сделать его нестабильным с помощью приложения. Если приложение работает нестабильно, просто try-restart
это ежечасно-ежедневно-еженедельно - что угодно.
Это меньше простоя, чем ожидание примерно 30 секунд, пока cron не сработает. Вы можете перезапустить ночью, при этом вы можете быть уверены, что любая нестабильность поразит вас, когда произойдет высокий трафик.
Скорее всего, вы остановите nginx для обслуживания и будете удивлены, если cron снова запустит его в середине вашей работы.
Подумайте о кластере кардиостимуляторов, если среда очень нестабильна.
И работа / инсталляция над ошибками приложения должны быть исправлены, чтобы оно могло работать месяц без зависаний / смерти.
Я согласен с комментарием, что вам не следует делать это с помощью cron. Однако, если вы все еще настаиваете, я думаю, что проблема возникает из-за того, что вы не получаете авторизацию с помощью команды sudo -s.