¿Cómo iniciar un script con privilegios de root al arrancar?

¿Cómo iniciar un script con privilegios de root al arrancar?

Probé con systemctl y con crontab sin éxito.

aquí está el guión:

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

derechos :

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

mi crontab que he ejecutado de esta manera:sudo crontab -e

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

Puedo ejecutar el script en la terminal sin problemas:sudo sh ghoststart.sh

cron de registro del sistema:

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 cron dejó de funcionar después de las 13:24:04, porque lo intenté después de eso.

edición 2: basado enesteYo he tratado

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 da el mismo error si no fuera root, obviamente openvpn esta instalado

3ra edición:

Si hago esto no me sale ningún error.

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

pero si hago esto obtengo uno:

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

el error es:

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 en/home/pat/.cyberghost/

cron debe estar ejecutando el script como root y no con sudo... o algo así, el script obtiene el archivo del usuario que lo ejecuta... si eso tiene sentido.

¡No tengo idea de cómo resolver eso!

Respuesta1

Su ghoststart.shsecuencia de comandos (o lo cyberghostvpnque contiene) está intentando iniciar OpenVPN llamando al openvpnejecutable. Este ejecutable no se encuentra en $PATHel script. Úselo command -v openvpnen una terminal para ubicar la ruta del ejecutable.

Si su openvpnejecutable se encuentra en /usr/sbin, puede escribir su programación crontab como

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

Su "tercera edición" también indica que la herramienta está buscando un archivo de configuración en el directorio de inicio del usuario que inicia la herramienta. Dice que tiene este archivo en el directorio de inicio de paty no en el directorio de inicio de root.

Tienes dos opciones aquí:

  1. Mueva el archivo de configuración a donde la herramienta espera encontrarlo, o
  2. Dígale a la herramienta dónde HOMEestá.

La segunda opción se podría hacer modificando el trabajo cron para decir

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

Respuesta2

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

¿Dónde está ubicado su binario openvpn? En mi Debian, es /usr/sbinlo que no forma parte de la variable PATH que pasaste a tu script... lo que explica el error que encontraste.

información relacionada