Thông thường systemd
các dịch vụ chỉ có một tập hợp các biến môi trường giới hạn và những thứ trong / etc / profile , các tập tin liên quan /etc/profile.d và bashrc không được đặt.
Để thêm các biến môi trường cho một systemd
dịch vụ, bạn có các khả năng khác nhau.
Các ví dụ như sau cho rằng roscore
là tại /opt/ros/kinetic/bin/roscore
kể từ khi systemd
dịch vụ phải có nhị phân hoặc kịch bản cấu hình với một đường dẫn đầy đủ.
Một khả năng là sử dụng Environment
tùy chọn trong systemd
dịch vụ của bạn và một systemd
dịch vụ đơn giản sẽ như sau.
[root@localhost ~]# cat /etc/systemd/system/ros.service
[Unit]
Description=ROS Kinetic
After=sshd.service
[Service]
Type=simple
Environment="One=1" "Three=3"
Environment="Two=2"
Environment="Four=4"
ExecStart=/opt/ros/kinetic/bin/roscore
[Install]
WantedBy=multi-user.target
Bạn cũng có thể đặt tất cả các biến môi trường vào một tệp có thể được đọc với EnvironmentFile
tùy chọn trong systemd
dịch vụ.
[root@localhost ~]# cat /etc/systemd/system/ros.env
One=1
Three=3
Two=2
Four=4
[root@localhost ~]# cat /etc/systemd/system/ros.service
[Unit]
Description=ROS Kinetic
After=sshd.service
[Service]
Type=simple
EnvironmentFile=/etc/systemd/systemd/ros.env
ExecStart=/opt/ros/kinetic/bin/roscore
[Install]
WantedBy=multi-user.target
Một tùy chọn khác là tạo tập lệnh bao bọc cho ros
tệp nhị phân của bạn và gọi tập lệnh trình bao bọc đó từ systemd
dịch vụ. Kịch bản cần phải được thực thi, để đảm bảo chạy chmod +755 /opt/ros/kinetic/bin/roscore.startup
sau khi tạo tệp đó.
[root@localhost ~]# cat /opt/ros/kinetic/bin/roscore.startup
#!/bin/bash
source /opt/ros/kinetic/setup.bash
roscore
[root@localhost ~]# cat /etc/systemd/system/ros.service
[Unit]
Description=ROS Kinetic
After=sshd.service
[Service]
Type=simple
ExecStart=/opt/ros/kinetic/bin/roscore.startup
[Install]
WantedBy=multi-user.target
Lưu ý rằng bạn cần chạy systemctl daemon-reload
sau khi bạn đã chỉnh sửa tệp dịch vụ để thực hiện các thay đổi. Để kích hoạt dịch vụ trên systemboot, bạn phải nhập systemctl enable ros
.
Tôi không quen thuộc với roscore
nhị phân và có thể cần phải thay đổi Type=
từ simple
(đó là mặc định và thông thường không cần thiết) thành forking
hai ví dụ đầu tiên.
Cập nhật , vì tôi quên đề cập đến các biến môi trường cho thông tin đăng nhập bình thường.
Đối với thông tin đăng nhập bình thường bạn có thể sao chép hoặc liên kết tượng trưng /opt/ros/kinetic/setup.bash để /etc/profile.d/ros.sh cần được bắt nguồn từ thông tin đăng nhập bình thường.
my_own.service
, các tệp dịch vụ khác có chứaRequires=my_own.service
kế thừa các biến môi trường này không?