como iniciar um script com privilégio de root na inicialização?

como iniciar um script com privilégio de root na inicialização?

Tentei com systemctl e com crontab sem sucesso.

aqui está o roteiro:

#!/bin/bash
cyberghostvpn --country-code AU --city Brisbane --connect

direitos :

-rwxr-xr-x 1 pat pat 71 nov 28 13:04 ghoststart.sh

meu crontab que executei desta maneira:sudo crontab -e

@reboot sleep 120; /home/pat/Documents/cyberghost/ghoststart.sh

posso executar o script no terminal sem problemas:sudo sh ghoststart.sh

cron do syslog:

Nov 28 13:17:57 mrpotato cron[679]: (CRON) INFO (pidfile fd = 3)
Nov 28 13:17:57 mrpotato cron[679]: (CRON) INFO (Running @reboot jobs)
Nov 28 13:17:59 mrpotato CRON[726]: (root) CMD (sh /home/pat/Documents/cyberghost/ghoststart.sh)
Nov 28 13:24:04 mrpotato cron[658]: (CRON) INFO (pidfile fd = 3)
Nov 28 13:24:04 mrpotato cron[658]: (CRON) INFO (Running @reboot jobs)

parece que o cron parou de funcionar depois das 13:24:04, porque eu fiz uma tentativa depois disso

edição 2: com base emesseeu tentei

root@mrpotato:/var/spool/cron/crontabs# /bin/sh -c "(export PATH=/usr/bin:/bin; /home/pat/Documents/cyberghost/ghoststart.sh </dev/null)"
Prepare OpenVPN connection ...
Please Install "openvpn" first!

me dá o mesmo erro se eu não fosse root, obviamente o openvpn está instalado

3ª edição:

se eu fizer isso, não recebo nenhum erro.

pat@mrpotato:~$ sudo /bin/sh -c "(export PATH=/usr/bin:/bin; /home/pat/Documents/cyberghost/ghoststart.sh </dev/null)"

mas se eu fizer isso eu recebo um:

root@mrpotato:~# /bin/sh -c "(export PATH=/usr/bin:/bin; /home/pat/Documents/cyberghost/ghoststart.sh </dev/null)"

o erro é:

Traceback (most recent call last):
  File "cyberghostvpn.py", line 580, in <module>
  File "cyberghostvpn.py", line 346, in main
  File "libs/config.py", line 45, in __init__
  File "libs/config.py", line 112, in readConfigFile
Exception: The config file "/home/root/.cyberghost/config.ini" does not exist!
[3845] Failed to execute script cyberghostvpn

config.ini existe em/home/pat/.cyberghost/

cron deve estar executando o script como root e não com sudo... ou algo parecido, o script obtém o arquivo do usuário em execução... se isso faz sentido.

não tenho ideia de como resolver isso!

Responder1

Seu ghoststart.shscript (ou cyberghostvpnalgo dentro dele) está tentando iniciar o OpenVPN chamando o openvpnexecutável. Este executável não foi encontrado no $PATHscript. Use command -v openvpnem um terminal para localizar o caminho do executável.

Se o seu openvpnexecutável estiver localizado em /usr/sbin, você pode escrever sua programação do crontab como

@reboot sleep 120 && PATH="$PATH:/usr/sbin" /home/pat/Documents/cyberghost/ghoststart.sh

Sua "3ª edição" também indica que a ferramenta está procurando um arquivo de configuração no diretório inicial do usuário que inicia a ferramenta. Você diz que tem esse arquivo no diretório inicial pate não no diretório inicial de root.

Você tem duas opções aqui:

  1. Mova o arquivo de configuração para onde a ferramenta espera encontrá-lo ou
  2. Diga à ferramenta onde HOMEestá.

A segunda opção poderia ser feita modificando o cron job para dizer

@reboot sleep 120 && HOME=/home/pat PATH="$PATH:/usr/sbin" /home/pat/Documents/cyberghost/ghoststart.sh

Responder2

root@mrpotato:/var/spool/cron/crontabs# /bin/sh -c "(export PATH=/usr/bin:/bin;/home/pat/Documents/cyberghost/ghoststart.sh

Onde está localizado seu binário openvpn? No meu Debian, é /usr/sbinonde não faz parte da variável PATH que você passou para o seu script... o que explica o erro que você encontrou.

informação relacionada