Necesito iniciar un servicio systemd desde Ruby on Rails. Mi código Ruby está usando acentos graves para llamar a systemctl:
`systemctl --user start myservice`No funciona y creo que tiene que ver con el usuario que ejecuta el comando. Rails se ejecuta en Passenger y el usuario para eso debería ser el mismo que mi servicio.
También probé formas alternativas de iniciar un subproceso.
(Esto debería ser un comentario en lugar de una respuesta, pero todavía estoy construyendo puntos de 'reputación', así que...)
Si Passenger tiene el mismo UID que myservice necesita para ejecutarse, entonces no es ahí donde radica el problema. Tampoco es probable que las otras formas de lanzar a un niño cambien el resultado.
Sugiero capturar la salida del subproceso de la siguiente manera: systemctl --user start myservice > /tmp/systemctl.output 2>&1 y luego inspeccionar el archivo de salida después de que falle el subproceso.
Pude resolver el problema diciéndole al shell dónde encontrar el DBUS correcto para el usuario. Establecí la variable de entorno XDG_RUNTIME_DIR en la ubicación de DBUS para el usuario, 1001 en mi caso. Verifique echo $UID para encontrar la identificación del usuario, no pude usar esto en línea.
`export XDG_RUNTIME_DIR="/run/user/1001" && systemctl --user start myservice`Gracias a Dj Molny por la publicación inicial y a NeilCasey por el resto .