Câu trả lời phụ thuộc vào việc biến số được cho là không đổi (nghĩa là không được sửa đổi bởi người dùng lấy đơn vị) hoặc biến (được cho là do người dùng đặt).
Vì là đơn vị địa phương của bạn, ranh giới khá mờ và một trong hai cách sẽ hoạt động. Tuy nhiên, nếu bạn bắt đầu phân phối nó và nó sẽ kết thúc /usr/lib/systemd/system
, điều này sẽ trở nên quan trọng.
Giá trị hiện có
Nếu giá trị không cần thay đổi theo từng thể hiện, cách ưa thích sẽ là đặt nó Environment=
trực tiếp vào tệp đơn vị:
[Unit]
Description=My Daemon
[Service]
Environment="FOO=bar baz"
ExecStart=/bin/myforegroundcmd
[Install]
WantedBy=multi-user.target
Ưu điểm của điều đó là biến được giữ trong một tệp duy nhất với đơn vị. Do đó, tập tin đơn vị dễ dàng di chuyển giữa các hệ thống.
Giá trị biến
Tuy nhiên, giải pháp trên không hoạt động tốt khi sysadmin được cho là thay đổi giá trị của biến môi trường cục bộ. Cụ thể hơn, giá trị mới sẽ cần được đặt mỗi khi tệp đơn vị được cập nhật.
Trong trường hợp này, một tập tin bổ sung sẽ được sử dụng. Làm thế nào - thường phụ thuộc vào chính sách phân phối.
Một giải pháp đặc biệt thú vị là sử dụng /etc/systemd/system/myservice.service.d
thư mục. Không giống như các giải pháp khác, thư mục này được hỗ trợ bởi chính systemd và do đó không có đường dẫn dành riêng cho phân phối.
Trong trường hợp này, bạn đặt một tệp như thế /etc/systemd/system/myservice.service.d/local.conf
sẽ thêm các phần còn thiếu của tệp đơn vị:
[Service]
Environment="FOO=bar baz"
Sau đó, systemd hợp nhất hai tệp khi bắt đầu dịch vụ (hãy nhớ systemctl daemon-reload
sau khi thay đổi một trong hai tệp). Và vì đường dẫn này được sử dụng trực tiếp bởi systemd, bạn không sử dụng EnvironmentFile=
cho đường dẫn này.
Nếu giá trị được cho là chỉ thay đổi trên một số hệ thống bị ảnh hưởng, bạn có thể kết hợp cả hai giải pháp, cung cấp mặc định trực tiếp trong đơn vị và ghi đè cục bộ trong tệp khác.
sysconfig
đường dẫn dành riêng cho Fedora nhưng câu hỏi là về Arch Linux. Câu trả lời của paluh thú vị hơn tôi nghĩ