Tùy chọn 1 - Kiểm tra PATH
Bước đầu tiên là xem liệu vấn đề nằm ở vị trí của các lệnh:
$ loại -a tiếng vang
echo là một shell dựng sẵn
tiếng vang là /bin/echo
$ gõ -a wmctrl
wmctrl là /usr/bin/wmctrl
Các tiếng vang
lệnh được tích hợp vào trình bao và cũng nằm trong /thùng rác
thư mục, đó là thư mục phổ biến nhất cho các chương trình.
Các wmctrl
lệnh nằm trong /usr/bin
thư mục có thể không phải là một phần của systemd của bạn CON ĐƯỜNG
.
Vì vậy, tương tự như câu hỏi này:
Giải pháp là thêm một dòng vào dịch vụ systemd:
[Dịch vụ]
Môi trường=PATH=/home/someUser/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Một tùy chọn khác là mã hóa cứng thư mục cho lệnh khi bạn gọi nó: /usr/bin/wmctrl
.
Lựa chọn 2 - WantedBy=multi-user.target
GHI CHÚ: Đây là tùy chọn chung cho những người khởi động và không áp dụng cho Tắt giống như OP đang làm.
Nếu đường dẫn không phải là vấn đề, bước tiếp theo là kiểm tra MuốnBy
Tùy chọn:
Câu trả lời ở đó giải thích:
Lưu ý rằng Wants hoặc WantedBy chỉ nói rằng hệ thống sẽ khởi động một dịch vụ bất cứ khi nào một dịch vụ hoặc mục tiêu khác cũng được khởi động, nhưng nó không chỉ định gì về thứ tự khởi động/tắt. Nếu bạn cần dịch vụ B đang chạy khi dịch vụ A khởi động, bạn cần thêm Before=A.service vào tệp B.service để chỉ định rõ ràng phụ thuộc thứ tự khởi động.
Hãy xem xét thực tế rằng GUI thậm chí có thể không chạy khi tập lệnh của bạn được chạy. Vì vậy, không có cửa sổ cho wmctrl -l
báo cáo.
Nếu đây là vấn đề Sau đó
(trong khi khởi động) chứ không phải MuốnBy
là một giải pháp có khả năng.
Tùy chọn 3 - Sử dụng /bin/true
Từ các nhận xét trong phần Hỏi & Đáp này:
Thay thế:
RemainafterExit=true
Với:
RemainafterExit=/bin/true
Ghi chú: thật
là một nội trang hệ vỏ và một lệnh:
$ loại -a đúng
true là một nội dung shell
đúng là /bin/true