Falha ao iniciar nginx.service: autenticação interativa necessária. com crontab

1

Estou tentando fazer um crontab para iniciar nginx se estiver parado.

Eu pesquisei e encontrei esses dois scripts

link

#!/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

de alguma forma, se eu executá-lo manualmente, ele funciona bem fazendo source scriptName depois de adicioná-lo a crontab , mesmo que o serviço seja interrompido, ele continue ecoando nginx is running e não inicie o serviço.

Então eu encontrei outro script no oceano digital

link

#!/bin/sh

ps auxw | grep nginx | grep -v grep > /dev/null

if [ $? != 0 ]
then
        /etc/init.d/nginx start > /dev/null
fi

novamente se eu rodar manualmente ele funciona, mas vai pedir a senha do usuário

==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to start 'nginx.service'.
Authenticating as: abc,,, (abc)

depois que eu digitei a senha ==== AUTHENTICATION COMPLETE === mostrará e iniciará nginx

então eu adiciono o script no crontab ... Eu recebo este erro de permissão

Failed to start nginx.service: Interactive authentication required.

Alguém sabe como posso consertar isso?

Agradecemos antecipadamente por qualquer aviso.

    
por Dora 06.04.2018 / 23:49

3 respostas

2

Esses scripts que você está tentando usar são obsoletos e não devem ser usados em um sistema moderno com o systemd.

Tente um script como este:

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

Mas, isso é uma hackeria terrivelmente desagradável e provavelmente não é necessária , então antes você faz isso , tente ter o systemd reiniciar o nginx automaticamente se ele parar. Faça isso com um drop-in do sistema :

[Service]
Restart=always

que você coloca como o arquivo /etc/systemd/system/nginx.service.d/override.conf (criando o diretório, se ele não existir). Você também pode usar systemctl edit nginx para criar o arquivo.

E, é claro, criar o drop-in systemd ou colocar esse script no crontab deve ser feito como root (tente usar sudo -i para um shell raiz de longa execução).

    
por 07.04.2018 / 18:45
2

Não faça isso pelo cron.

O Nginx em si é muito estável, não vai parar o serviço sem motivo. Você pode torná-lo instável com um aplicativo embora. Se o aplicativo estiver instável, apenas try-restart ele por hora, diariamente, semanalmente, o que for.

É menos falta de energia do que esperar cerca de 30 segundos até que o cron entra em ação. Você pode reiniciar à noite, enquanto pode ter certeza de que qualquer instabilidade atingirá você quando ocorrer um tráfego intenso.

Provavelmente, você irá parar o nginx para manutenção e ficaria surpreso com o cron iniciando-o no meio do seu trabalho.

Pense no cluster de marcapasso se o ambiente estiver muito instável.

E trabalhe / instigue na correção de bugs de aplicativos, para que ele possa ser executado por um mês sem interrupção / morte.

    
por 07.04.2018 / 00:58
-1

Concordo com o comentário de que você não deve fazer isso pelo cron. No entanto, se você ainda insistir, acho que o problema acontece porque você não obtém autorização pelo comando sudo -s.

    
por 10.07.2018 / 18:52