Linux

啟動 nginx.service 失敗:需要互動式身份驗證。使用 crontab

  • July 10, 2018

如果它停止,我正在嘗試crontab啟動。nginx

我用Google搜尋並找到了這兩個腳本

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.

有誰知道我該如何解決這個問題?

提前感謝您的任何建議。

您一直嘗試使用的那些腳本已經過時,不應該在帶有 systemd 的現代系統上使用。

試試這樣的腳本:

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

但是,這是一些非常討厭的hackery可能沒有必要,所以你這樣做之前,嘗試讓systemd在它停止時自動重啟nginx。使用systemd 外掛來做到這一點:

[Service]
Restart=always

您將其作為文件放置/etc/systemd/system/nginx.service.d/override.conf(如果目錄不存在,則創建目錄)。您也可以使用systemctl edit nginx來創建文件。

當然,無論是創建 systemd 外掛,還是將此腳本放在 crontab 中,都必須以 root 身份完成(嘗試使用sudo -i長時間執行的 root shell)。

引用自:https://serverfault.com/questions/906472