Failed to start nginx.service: Interactive authentication required. with crontab
I am trying to make a crontab
to start nginx
if it is stopped.
I googled and found these two scripts
http://www.akamaras.com/linux/linux-script-to-check-if-a-service-is-running-and-start-it-if-its-stopped/
#!/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
somehow if I run it manually it works fine by doing source scriptName
after I add it to crontab
even if the service is stopped, it keeps on echoing nginx is running
and does not start the service.
Then I found another script in digital ocean
https://www.digitalocean.com/community/tutorials/how-to-use-a-simple-bash-script-to-restart-server-programs
#!/bin/sh
ps auxw | grep nginx | grep -v grep > /dev/null
if [ $? != 0 ]
then
/etc/init.d/nginx start > /dev/null
fi
again if I run it manually it works, but it will ask for the user's password
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to start 'nginx.service'.
Authenticating as: abc,,, (abc)
after I typed in the password ==== AUTHENTICATION COMPLETE ===
will show and starts nginx
then I add the script into crontab...I get this permission error
Failed to start nginx.service: Interactive authentication required.
Does anyone know how I can fix this?
Thanks in advance for any advices.
Those scripts you have been trying to use are obsolete and shouldn't be used on a modern system with systemd.
Try a script like this instead:
#!/bin/bash
if ! systemctl is-active nginx >/dev/null ; then
systemctl start nginx
fi
But, that is some terribly nasty hackery and probably not necessary, so before you do that, try having systemd restart nginx automatically if it stops. Do that with a systemd drop-in:
[Service]
Restart=always
which you place as the file /etc/systemd/system/nginx.service.d/override.conf
(creating the directory if it doesn't exist). You can also use systemctl edit nginx
to create the file.
And of course, either creating the systemd drop-in, or putting this script in crontab, must be done as root (try using sudo -i
for a long running root shell).
Don't do this via cron at all.
Nginx itself is very stable, it won't just stop the service for no reason. You can make it unstable with an application though. If the application is unstable, just try-restart
it hourly-daily-weekly-whatever.
It's less outage than waiting about 30 seconds until cron kicks in. You can restart at night, whereas you can be assured any instabilities will hit you when high traffic happens.
Chances are that you will stop nginx for maintenance and you'd be suprised by cron starting it back in the middle of your work.
Think about pacemaker cluster if the environment is very unstable.
And work/instist on application bugs to be fixed, so it can run a month without a hang/death.