如果它停止了,我会尝试启动它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.
有人知道我该如何解决这个问题吗?
提前感谢任何建议。
答案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 命令获得授权而发生的。