Menjalankan layanan systemd sebagai pengguna selain root!


18

Saya membuat layanan berikut, amos.service, dan perlu dijalankan sebagai amos (anggota grup 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

semua izin telah diatur /usr/share/amoskeamos:amos

amos_service.sh adalah sebagai berikut:

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

Ketika saya menjalankan layanan pada awalnya tanpa ada modifikasi pada direktori, artinya, milik root, dan amos.service tidak memiliki parameter User not Group, semuanya berjalan dengan baik!

Setelah saya mengubah izin direktori menjadi amos: amos dan menambahkan Pengguna & Grup amos, serive tidak akan berfungsi dan saya mendapatkan yang berikut: Lihat gambar terlampir

Kesalahan setelah mencoba menjalankan layanan


Apa perbedaan, jika ada, antara kasus keberhasilan dan kegagalan dalam hal pesan yang masuk ke /var/log/amos.log?
sourcejedi

Juga, konfigurasi ini aneh karena /var/logdimiliki oleh root. Saya pikir Anda ingin menggunakan direktori /var/log/amos/yang Anda buat seperti yang dimiliki oleh AMOS.
sourcejedi

Saya akan membuat seperti yang disebutkan dan akan mencatat kembali hasil
itprguy

Jawaban:


11

Gunakan systemd:

Untuk menunjukkan masalah, gunakan journalctl -xesetelah Anda memulai layanan.

Anda tidak memerlukan skrip bash, letakkan ini di file layanan Anda:

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

Tidak perlu ExecStop, systemd akan menghentikan semua proses anak. Anda dapat melihat hasilnya dengan journalctl -u amos.service.


4
Seharusnya ada "=" setelah ExecStart. Saya tidak dapat memperbaikinya karena hasil edit kurang dari 6 karakter.
Mark Stosberg

5

Saya pikir Anda ingin bercabang bukan sederhana. Sederhana berasumsi proses Anda tidak keluar, jadi ketika itu terjadi, ia menyebut proses mati.

Anda mungkin ingin menghapus skrip amos_service.sh dan memasukkan fungsinya ke dalam amos.service.


Akan melakukan perubahan seperti yang disarankan ... sedang membacanya dan melihat komentar Anda. Akan masuk kembali hasil.
itprguy
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.