Bir systemd hizmetini root dışında bir kullanıcı olarak çalıştırmak!


18

Aşağıdaki hizmeti yarattım, amos.service ve amos (amos grubunun üyesi) olarak çalışması gerekiyor

[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

Tüm izinler üzerinde ayarlanmış /usr/share/amosiçinamos:amos

amos_service.sh aşağıdaki gibidir:

#!/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"

Hizmeti başlangıçta dizinlerde herhangi bir değişiklik yapmadan çalıştırdığımda, yani root'a ait olan ve amos.service Kullanıcı Grubu değil parametresine sahip olmadığımda, her şey harika çalışıyor!

Dizinlerin izinlerini amos: amos olarak değiştirip amos.service Kullanıcı ve Grubunu ekledikten sonra, serive çalışmaz ve aşağıdakileri elde ederim: Ekli resme bakın

Hizmeti çalıştırmayı denedikten sonra hata


/Var/log/amos.log dosyasına kaydedilen iletiler açısından başarı ve başarısızlık durumları arasındaki fark nedir?
sourcejedi

Ayrıca, bu yapılandırma /var/logkök sahip olduğu tuhaftır . /var/log/amos/Amos'a ait olarak oluşturduğunuz bir dizini kullanmak istediğinizi düşünüyorum .
sourcejedi

Belirtildiği gibi oluşturacağım ve sonuçları tekrar
kaydedeceğim

Yanıtlar:


11

Systemd kullanın:

journalctl -xeHizmeti başlattıktan sonra sorunu göstermek için .

Bir bash betiğine ihtiyacınız yoktur, bunu hizmet dosyanıza koyun:

ExecStart=/usr/share/amos/run_amos.sh

Gerek yok ExecStop, systemd tüm alt süreçleri durduracak. Çıkışı ile görüntüleyebilirsiniz journalctl -u amos.service.


4
ExecStart'tan sonra "=" olmalıdır. Düzenleme 6 karakterden az olacağı için düzeltemiyorum.
Mark Stosberg

5

Bence basit yerine çatallamak istiyorsun. Basit, işleminizin çıkmadığını varsayar, bu nedenle işlemi ölü olarak adlandırır.

Muhtemelen amos_service.sh betiğini kaldırmak ve işlevselliğini amos.service içine koymak istiyorsunuz.


Önerildiği gibi değişiklikler yapacak ... bu konuda okuyordu ve yorumunuzu gördü. Sonuçları kaydeder.
itprguy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.