Câu hỏi: Tôi có thể khởi động một tiến trình với systemd và gán tiến trình đó cho một thư mục làm việc mà tôi chọn không?
Tôi có một dịch vụ mà tôi muốn bắt đầu systemd
. Khi dịch vụ đó đang được bắt đầu, tôi muốn có thể gán cho nó một thư mục làm việc hiện tại. Tôi biết làm thế nào để làm điều này nếu tôi đang sử dụng init
, nhưng tôi gặp rắc rối với systemd
.
Đây là những gì tôi đã cố gắng để làm việc.
Dịch vụ của tôi
Tôi đã tạo một tiện ích đơn giản ("listdir"), được viết bằng Python và được đặt trong /opt/bin/listdir
:
#! /usr/bin/python
import os
print 'Current working directory: %s' % (os.getcwd())
Tập tin cấu hình của tôi
Sau đó tôi đã tạo một listdir.service
tệp cho systemd
và đặt nó ở đây /lib/systemd/system/listdir.service
::
[Unit]
Description=Test of listing CWD.
[Service]
ExecStartPre=chdir /usr/local
ExecStart=/opt/bin/listdir
StandardOutput=syslog
StandardError=syslog
[Install]
WantedBy=multi-user.target
Vấn đề
Khi tôi chạy systemctl start listdir
nhật ký hệ thống của tôi ghi lại thư mục gốc ("/") là thư mục làm việc hiện tại. Tất nhiên, tôi mong đợi /usr/local
là thư mục hiện tại, vì tôi nghĩ ExecStartPre
sẽ thay đổi thư mục trước khi bắt đầu quá trình.
Rõ ràng, tôi đang tưởng tượng rằng nó systemd
sẽ hoạt động giống như một kịch bản shell (mặc dù tôi biết đó không phải là một kịch bản shell). Ai đó có thể cho tôi một ý tưởng về những gì tôi nên làm? Thậm chí có thể thiết lập một thư mục làm việc bằng cách sử dụng systemd
? Cảm ơn!
Chỉnh sửa: Nhật ký hệ thống của tôi đang báo lỗi. (Tôi chỉ nhận thấy.)
Executable path is not absolute, ignoring: chdir /usr/local
Vì vậy, chdir
là một lệnh shell, và bản thân nó không phải là một lệnh thực thi. Được chứ. Nhưng vẫn còn một số cách để tôi thay đổi thư mục bằng cách sử dụng systemd
?