Utworzyłem następującą usługę amos.service i musi ona działać jako amos (członek grupy 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
wszystkie uprawnienia zostały ustawione na /usr/share/amos
celuamos:amos
Plik amos_service.sh wygląda następująco:
#!/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"
Kiedy uruchamiam usługę początkowo bez żadnych modyfikacji katalogów, co oznacza, że należy do roota i amos.service nie ma parametru User not Group, wszystko działa świetnie!
Po zmianie uprawnień katalogów na amos: amos i dodaniu użytkownika i grupy amos.service serive nie będzie działać i otrzymam następujące informacje: Zobacz załączony obraz
/var/log
jest własnością root. Myślę, że chcesz użyć katalogu,/var/log/amos/
który tworzysz jako własność amos.Odpowiedzi:
Użyj systemd:
Aby wyświetlić problem, użyj go
journalctl -xe
po uruchomieniu usługi.Nie potrzebujesz skryptu bash, umieść to w pliku usługi:
Nie ma takiej potrzeby
ExecStop
, systemd zatrzyma wszystkie procesy potomne. Możesz wyświetlić dane wyjściowe za pomocąjournalctl -u amos.service
.źródło
Myślę, że chcesz rozwidlać zamiast prostego. Simple zakłada, że proces się nie kończy, więc kiedy to nastąpi, wywołuje proces martwy.
Prawdopodobnie chcesz usunąć skrypt amos_service.sh i umieścić jego funkcjonalność w pliku amos.service.
źródło