Hacemos una verificación exhaustiva cada una de las reseñas en nuestra página web con la meta de mostrarte en todo momento información certera y actual.
TL; DR: Usar sudo -b
o mejor, openvpn [...] --daemon
.
Ya que estas corriendo openvpn
(y, menos específicamente, dado que desea ejecutar un programa como root en segundo plano), la información proporcionada con más frecuencia acerca de cómo ejecutar comandos en segundo plano no aborda su situación. Tu dijiste:
Intenté agregar un & al comando cpenvpn y colocar nohop delante de él. Ambos no funcionan.
Tu comando es:
sudo openvpn ~/my_connection.ovpn
Bajo sudo
configuración predeterminada, si no ha introducido recientemente su contraseña para sudo
en la misma terminal (o se ha desconectado y vuelto a entrar en esa terminal) entonces le pedirá su contraseña. Pero si ejecuta el comando en segundo plano agregando &
entonces no se te mostrará el [sudo] password for user:
línea o se le dio la oportunidad de escribirlo.
Entonces, en esta situación, ejecutar el comando, ingresar su contraseña y enviarla a segundo plano es una forma razonable de hacerlo. para uso interactivo.
Pero no es la única forma y, como dices, no querrás hacer eso. en un guión.
Camino 1: Asegurarse sudo
tiene una marca de tiempo nueva.
Puede asegurarse de que sudo
tiene una marca de tiempo actual cuando se usa para ejecutar su comando, ejecutando primero:
sudo -v
Luego, después de eso, puedes ejecutar:
sudo openvpn ~/my_connection.ovpn &
Sin embargo, generalmente es mejor evitar &
(y nohup
) en conjunto cuando desee ejecutar un comando en segundo plano con sudo
. Este es especialmente el caso de las secuencias de comandos.
Camino 2: Usar sudo -b
. En general, esto suele ser lo que desea.
En cambio, puedes correr sudo
en primer plano, pero pasa el -b
marcar así sudo
hace que el comando se ejecute en segundo plano.
sudo -b openvpn ~/my_connection.ovpn
Por lo general, esta es una mejor manera, especialmente si está colocando el comando en un script. Con sudo -b
no obtiene el control del trabajo, pero en un script de shell el control del trabajo está deshabilitado de forma predeterminada y normalmente no debería usarlo.
Como man sudo
explica:
-b, --background
Run the given command in the background. Note that it is not
possible to use shell job control to manipulate background
processes started by sudo. Most interactive commands will
fail to work properly in background mode.
Esto funciona porque no se ejecuta nada en segundo plano hasta después sudo ha recibido su contraseña (si es necesario) y ha determinado que puede ejecutar el comando.
Camino 3: Pero para openvpn
, probablemente deberías ejecutarlo con --daemon
.
openvpn
se ejecutará en segundo plano automáticamente si lo ejecuta con el --daemon
opción:
sudo openvpn ~/my_connection.ovpn --daemon
Aprobar --daemon
despues de ti .opvn
nombre de archivo en lugar de antes; el argumento siguiente --daemon
, si lo hay, se interpreta como el nombre que el demonio openvpn
debe utilizar el proceso. (Hacer no también anexar &
.)
Si esto es apropiado o no depende de si debe ocurrir alguna interacción después openvpn
se ha ejecutado pero antes de que se demonice. Y ese depende, en parte, de lo que se establezca en ~/my_connection.ovpn
. Pero Si openvpn
no pudo demonizar inmediatamente, entonces todas las otras formas de ejecutarlo inmediatamente en segundo plano también se romperán.
Por lo tanto, en cualquier situación en la que sepa que desea openvpn
a comienzo ejecutándose en segundo plano, y sabe que no querrá traerlo de nuevo al primer plano, debe considerar seriamente el método para invocarlo con el --daemon
opción. Esto es específico para openvpn
– la mayoría de los programas no son compatibles con --daemon
opción, aunque muchos programas de servidor tienen alguna de estas opciones. (Sin embargo, el nombre y la sintaxis varían).
Para decidir si usar o no esta opción (y cómo desea usarla), le recomiendo que lea el openvpn
página de manual, especialmente en la sección sobre --daemon
. Tiene mucha información útil, y solo cito el primer párrafo aquí:
--daemon [progname]
Become a daemon after all initialization functions are
completed. This option will cause all message and error output
to be sent to the syslog file (such as /var/log/messages),
except for the output of scripts and ifconfig commands, which
will go to /dev/null unless otherwise redirected. The syslog
redirection occurs immediately at the point that --daemon is
parsed on the command line even though the daemonization point
occurs later. If one of the --log options is present, it will
supercede syslog redirection.
The optional progname parameter [...]
Camino 4: A veces es razonable ejecutar todo el script como root.
Si tiene un script que realiza múltiples acciones como root, no tiene ninguna actividad significativa que razonablemente se ejecute no como root, y nunca hay nada útil por ejecutar el script como un usuario no root, entonces el usuario del script probablemente debería ejecutarlo como root.
Si este es el caso, debe eliminar sudo
de los comandos en el script. Cuando el script se ejecuta como root, no es necesario sudo
. (Aunque el usuario root puede, de forma predeterminada, ejecutar cualquier comando como cualquier usuario, incluido él mismo con sudo
y no necesita una contraseña para hacerlo. Así que si usted hacer dejar instancias de sudo
en el script, probablemente seguirá funcionando).
Si tiene alguna instancia de sudo
en el script que realmente se utilizan para ejecutar comandos como algún otro usuario que no sea root (con -u user
), entonces deberías mantener aquellos instancias.
Si todo el script se ejecuta como root, entonces se aplican la mayoría de las formas típicas de hacer que los comandos se ejecuten en segundo plano, incluida la adición &
y, cuando sea necesario, el uso de nohup
(que ya conoces). Sin embargo, para esto, debería considerar seriamente usar openvpn
con el --daemon
opción.
TL; DR Ejecútelo en modo demonio: openvpn --config Windscribe-Japan.ovpn --daemon
Pasando el nombre de archivo de configuración (.ovpn) a openvpn
El comando funciona solo si no se especifican otras opciones. Si especifico --daemon
opción luego openvpn intenta analizar el nombre del archivo como un parámetro de opciones y lanza Error de opciones: estoy tratando de analizar “Windscribe.ovpn” como un parámetro de opción, pero no veo un “-” inicial.
Respuesta:
Para evitar esto, el nombre del archivo debe especificarse con --config
opción. Por ejemplo, openvpn --config Windscribe.ovpn --daemon
. Luego siga el syslog con tail -f /var/log/syslog
, para una inspección más detallada.
También puede verificar la salida antes y después de este comando curl curl ifconfig.co
para asegurarse de que la VPN esté conectada.
Nota: Esto mantendrá el demonio en ejecución incluso después de cerrar la sesión SSH.
Puedes simplemente copiar tu
archivo .conf en / etc / openvpn /
Entonces pregunte ‘servicio [email protected] start ‘para manejar todas las demonizaciones y sudo por usted.
Ver https://unix.stackexchange.com/a/366680/198666
Si te gusta la informática, eres capaz de dejar una división acerca de qué le añadirías a esta división.