Chạy một dịch vụ systemd như một người dùng khác ngoài root!


18

Tôi đã tạo dịch vụ sau, amos.service và nó cần chạy như amos (thành viên của nhóm 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

tất cả các quyền đã được đặt /usr/share/amosthànhamos:amos

amos_service.sh như sau:

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

Khi tôi chạy dịch vụ ban đầu mà không có bất kỳ sửa đổi nào đối với các thư mục, nghĩa là thuộc về root và amos.service không có tham số User not Group, mọi thứ đều chạy rất tốt!

Khi tôi thay đổi quyền của thư mục thành amos: amos và thêm amos.service User & Group, serive sẽ không hoạt động và tôi nhận được thông tin sau: Xem hình ảnh đính kèm

Lỗi sau khi chạy dịch vụ


Sự khác biệt, nếu có, giữa các trường hợp thành công và thất bại về các thông điệp được ghi vào /var/log/amos.log là gì?
nguồn

Ngoài ra, cấu hình này là kỳ lạ trong đó /var/logđược sở hữu bởi root. Tôi nghĩ rằng bạn muốn sử dụng một thư mục /var/log/amos/mà bạn tạo như sở hữu của amos.
nguồn

Tôi sẽ tạo như đã đề cập và sẽ đăng nhập lại kết quả
vào

Câu trả lời:


11

Sử dụng systemd:

Để hiển thị vấn đề sử dụng journalctl -xesau khi bạn bắt đầu dịch vụ.

Bạn không cần một tập lệnh bash, hãy đặt tập lệnh này vào tệp dịch vụ của bạn:

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

Không cần ExecStop, systemd sẽ dừng tất cả các tiến trình con. Bạn có thể xem đầu ra với journalctl -u amos.service.


4
Cần có "=" sau ExecStart. Tôi không thể sửa nó vì bản chỉnh sửa sẽ có ít hơn 6 ký tự.
Mark Stosberg

5

Tôi nghĩ rằng bạn muốn rèn thay vì đơn giản. Đơn giản giả định quy trình của bạn không thoát, vì vậy khi thực hiện, nó gọi quy trình đã chết.

Bạn có thể muốn xóa tập lệnh amos_service.sh và đưa chức năng của nó vào amos.service.


Sẽ thay đổi theo đề xuất ... đã đọc về nó và thấy bình luận của bạn. Sẽ đăng nhập lại kết quả.
itprguy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.