Biasanya systemdlayanan hanya memiliki seperangkat variabel lingkungan terbatas dan hal-hal di / etc / profile , /etc/profile.d dan file terkait bashrc tidak disetel.
Untuk menambahkan variabel lingkungan untuk systemdlayanan, Anda memiliki berbagai kemungkinan.
Contoh sebagai berikut menganggap bahwa roscoreadalah di /opt/ros/kinetic/bin/roscorekarena systemdlayanan harus memiliki biner atau script dikonfigurasi dengan path lengkap.
Satu kemungkinan adalah menggunakan Environmentopsi dalam systemdlayanan Anda dan systemdlayanan sederhana adalah sebagai berikut.
[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
Anda juga dapat menempatkan semua variabel lingkungan ke dalam file yang dapat dibaca dengan EnvironmentFileopsi di systemdlayanan.
[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
Opsi lain adalah membuat skrip wrapper untuk rosbiner Anda dan memanggil skrip wrapper dari systemdlayanan. Skrip harus dapat dieksekusi, untuk memastikan dijalankan chmod +755 /opt/ros/kinetic/bin/roscore.startupsetelah membuat file itu.
[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
Perhatikan bahwa Anda perlu menjalankan systemctl daemon-reloadsetelah Anda mengedit file layanan untuk membuat perubahan aktif. Untuk mengaktifkan layanan di systemboot, Anda harus masuk systemctl enable ros.
Saya tidak terbiasa dengan roscorebiner dan mungkin perlu untuk mengubah Type=dari simple(yang merupakan standar dan biasanya tidak diperlukan) ke forkingdalam dua contoh pertama.
Perbarui , karena saya lupa menyebutkan variabel lingkungan untuk login normal.
Untuk login normal Anda bisa menyalin atau symlink /opt/ros/kinetic/setup.bash ke /etc/profile.d/ros.sh yang harus bersumber pada login normal.
my_own.service, dapatkah file layanan lain yang berisiRequires=my_own.servicemewarisi variabel-variabel lingkungan ini?