Creé el siguiente servicio, amos.service, y necesita ejecutarse como amos (miembro del grupo amos)
[Unit]
Description=AMOS Service
After=network.target
[Service]
User=amos
Group=amos
Type=simple
WorkingDirectory=/usr/share/amos
ExecStart=/usr/share/amos/amos_service.sh start
ExecStop=/usr/share/amos/amos_service.sh stop
Restart=on-failure
[Install]
WantedBy=multi-user.target
todos los permisos se han fijado en /usr/share/amos
aamos:amos
amos_service.sh es el siguiente:
#!/bin/bash
CUDIR=$(dirname "$0")
cd /usr/share/amos
start() {
exec /usr/share/amos/run_amos.sh >> /var/log/amos.log 2>&1
}
stop() {
exec pkill java
}
case $1 in
start|stop) "$1" ;;
esac
cd "$CURDIR"
Cuando ejecuto el servicio inicialmente sin ninguna modificación en los directorios, es decir, perteneciente a root, y amos.service no tiene el parámetro Usuario no Grupo, ¡todo funciona muy bien!
Una vez que cambie los permisos de los directorios a amos: amos y agregue el usuario y grupo amos.service, el servidor no funcionará y obtengo lo siguiente: Ver imagen adjunta
/var/log
es propiedad de root. Creo que desea utilizar un directorio/var/log/amos/
que cree como propiedad de amos.Respuestas:
Utilice systemd:
Para mostrar el problema, use
journalctl -xe
después de iniciar el servicio.No necesita un script bash, ponga esto en su archivo de servicio:
No es necesario
ExecStop
, systemd detendrá todos los procesos secundarios. Puede ver la salida conjournalctl -u amos.service
.fuente
Creo que quieres bifurcar en lugar de simple. Simple asume que su proceso no sale, por lo que cuando lo hace, lo llama muerto.
Probablemente desee eliminar el script amos_service.sh y poner su funcionalidad en el amos.service.
fuente