Я создал следующий сервис, amos.service, и он должен работать как amos (член группы 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
все разрешения установлены на /usr/share/amos
кamos:amos
amos_service.sh выглядит следующим образом:
#!/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"
Когда я запускаю сервис изначально без каких-либо изменений в каталогах, то есть, принадлежащих root, и amos.service без параметра User not Group, все работает отлично!
После того, как я изменил разрешения каталогов на amos: amos и добавил пользователя и группу amos.service, Serive не будет работать, и я получаю следующее: См. Прикрепленное изображение
/var/log
принадлежит root. Я думаю, что вы хотите использовать каталог,/var/log/amos/
который вы создаете как принадлежащий amos.Ответы:
Используйте systemd:
Чтобы показать проблему, используйте
journalctl -xe
после запуска службы.Вам не нужен bash-скрипт, поместите его в служебный файл:
В этом нет необходимости
ExecStop
, systemd остановит все дочерние процессы. Вы можете просмотреть вывод с помощьюjournalctl -u amos.service
.источник
Я думаю, что вы хотите разветвления вместо простого. Simple предполагает, что ваш процесс не завершается, поэтому, когда это происходит, он вызывает процесс как мертвый.
Вы, вероятно, хотите удалить скрипт amos_service.sh и поместить его функциональность в amos.service.
источник