无法启动 nginx.service:需要使用 crontab 进行交互式身份验证。

无法启动 nginx.service:需要使用 crontab 进行交互式身份验证。

如果它停止了,我会尝试启动它crontabnginx

我谷歌了一下,找到了这两个脚本

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

source scriptName不知何故,如果我手动运行它,它在我将其添加后可以正常工作,crontab即使服务停止,它也会继续回显nginx is running并且不会启动服务。

然后我在数字海洋里找到了另一个脚本

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

如果我再次手动运行它,它会工作,但它会要求输入用户的密码

==== 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.

有人知道我该如何解决这个问题吗?

提前感谢任何建议。

答案1

您尝试使用的那些脚本已经过时,不应在带有 systemd 的现代系统上使用。

尝试使用如下脚本:

#!/bin/bash
if ! systemctl is-active nginx >/dev/null ; then
    systemctl start nginx
fi

但这是一些极其恶劣的黑客行为可能没有必要, 所以你做吧, 尝试让 systemd 自动重启 nginx如果它停止了。用systemd 插件

[Service]
Restart=always

将其作为文件放置/etc/systemd/system/nginx.service.d/override.conf(如果目录不存在,则创建目录)。您还可以使用systemctl edit nginx创建文件。

当然,无论是创建 systemd 插件,还是将此脚本放入 crontab,都必须以 root 身份完成(尝试使用sudo -i长期运行的 root shell)。

答案2

根本不要通过 cron 来执行此操作。

Nginx 本身非常稳定,不会无缘无故停止服务。不过,你可以用应用程序让它变得不稳定。如果应用程序不稳定,那就try-restart每小时、每天、每周等等。

与等待 30 秒左右直到 cron 启动相比,它的中断时间要短。您可以在晚上重新启动,而当发生高流量时,您可以确保任何不稳定因素都不会影响您。

很有可能您会因为维护而停止 nginx,然后您会惊讶地发现 cron 会在您工作过程中重新启动它。

如果环境非常不稳定,请考虑起搏器集群。

并努力/坚持修复应用程序错误,以便它可以运行一个月而不会挂起/死亡。

答案3

我同意你不应该通过 cron 执行此操作的评论。但是如果你仍然坚持,我认为问题是由于你没有通过 sudo -s 命令获得授权而发生的。

相关内容