không thể bắt đầu dịch vụ


15

Tôi đã tạo một dịch vụ systemd:

[Unit]
Description=My service

[Service]
Type=forking
ExecStart=/bin/sh $HOME/theFolder/run.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=mine.service

Tôi đặt nó trong thư mục / etc / systemd / system và đặt tên là mine.service.

Nếu tôi chạy sudo service mine startnó sẽ cho tôi:

Không thể khởi động mine.service.Unit mine.service không tìm thấy

--- CẬP NHẬT -----

Tôi chạy trước sudo systemctl daemon-reloadvà bây giờ nó không cho tôi bất kỳ tin nhắn nào nhưng dịch vụ vẫn không bắt đầu.


10
Bạn đã chạy systemctl daemon-reloadsau khi tạo tập tin đơn vị của bạn?
Wieland

@Wieland: Hmm..Bây giờ nó không hiển thị cho tôi bất kỳ tin nhắn nào. Nhưng, nó vẫn không bắt đầu.
George

@don_crissti: Trạng thái cho biết nó đang hoạt động, nhưng tập lệnh (trong ExecStart) không được thực thi.
George

Làm thế nào để biết $ HOME thích hợp? Những gì bạn mong đợi nó là cho một dịch vụ hệ thống?
Serge

@Serge: Hmm..Vậy, làm thế nào tôi có thể sử dụng $ HOME?
George

Câu trả lời:


14

$HOMEchỉ vào thư mục chính của người dùng đang chạy tập lệnh. Các dịch vụ Systemd được bắt đầu với root nên có khả năng nó sẽ cố gắng /root/theFolder/run.sh. Sử dụng đường dẫn tuyệt đối trong các tập tin dịch vụ.

Bạn cũng có bộ forkingtùy chọn. Điều này là cần thiết cho chương trình nền tảng chính nó, kịch bản của bạn làm điều này? Hầu hết không và nếu không phải của bạn, bạn nên xóa tùy chọn này hoặc systemd sẽ đợi tập lệnh của bạn kết thúc để yêu cầu nó như đã bắt đầu.

Ngoài ra các tệp dịch vụ hệ thống trỏ đến các tập lệnh trong thư mục chính của bạn không được khuyến khích và có thể là vấn đề bảo mật. Vì chúng được chạy dưới quyền root nên bất kỳ ai có thể sửa đổi chúng đều có khả năng truy cập root vào máy tính của bạn. Tốt hơn hết là sao chép tập lệnh vào /usr/local/binvà đảm bảo nó được sở hữu và chỉ có thể ghi bằng root để ngăn chặn điều này. Nó cũng là một ý tưởng tốt để chạy tập lệnh như một người dùng không có quyền sử dụng User=Group=các tùy chọn trong tệp dịch vụ.

Nếu bạn muốn chạy nó với tư cách là người dùng của mình, tốt hơn là đặt tệp dịch vụ vào ~/.config/systemd/user/và bắt đầu / kích hoạt nó với systemctl --user enable yourservice && systemctl --user start yourservice(lưu ý, chạy khi người dùng của bạn không root). Xem điều này để biết thêm về các tập tin dịch vụ người dùng.


: Tôi đặt tập lệnh vào / usr / local / bin và dịch vụ vào /.config/systemd/user. Nếu tôi cố gắng kích hoạt dịch vụ, nó sẽ hiển thị cho tôi "đối số thừa". Nếu tôi thử sử dụng systemctl, nó sẽ hiển thị 'không thành công .. đơn vị .. ', một cái gì đó như thế này.
George

Bạn có thể cung cấp các lệnh đầy đủ bạn đã thử và nhật ký chi tiết hơn. Thật khó để gỡ lỗi với các mảnh vỡ.
Michael Daffin

: Có giải pháp nào để sử dụng đường dẫn $ HOME không? Bởi vì, nếu tôi đặt tập lệnh vào / usr / local / bin, nó sử dụng các đường dẫn tương đối đến $ HOME . Tôi đã thấy điều này . Tôi đã cố gắng đưa HOME=$HOMEvào tệp môi trường đầu tiên. Nhưng dịch vụ không thể bắt đầu, không có lỗi.
George

1
trên Ubuntu tôi đã phải sử dụng systemctl cho việc này không phải systemd, khi sử dụng systemd tôi đã gặp lỗi "Đối số dư thừa"
Alexander Mills

1
@AlexanderMills Bạn nói đúng, lệnh đúng trong systemctl và systemd chỉ là một lỗi đánh máy trong câu trả lời.
Michael Daffin
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.