Biasanya systemd
layanan 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 systemd
layanan, Anda memiliki berbagai kemungkinan.
Contoh sebagai berikut menganggap bahwa roscore
adalah di /opt/ros/kinetic/bin/roscore
karena systemd
layanan harus memiliki biner atau script dikonfigurasi dengan path lengkap.
Satu kemungkinan adalah menggunakan Environment
opsi dalam systemd
layanan Anda dan systemd
layanan 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 EnvironmentFile
opsi di systemd
layanan.
[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 ros
biner Anda dan memanggil skrip wrapper dari systemd
layanan. Skrip harus dapat dieksekusi, untuk memastikan dijalankan chmod +755 /opt/ros/kinetic/bin/roscore.startup
setelah 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-reload
setelah Anda mengedit file layanan untuk membuat perubahan aktif. Untuk mengaktifkan layanan di systemboot, Anda harus masuk systemctl enable ros
.
Saya tidak terbiasa dengan roscore
biner dan mungkin perlu untuk mengubah Type=
dari simple
(yang merupakan standar dan biasanya tidak diperlukan) ke forking
dalam 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.service
mewarisi variabel-variabel lingkungan ini?