Ubuntuに正しくインストールされているROSを使用しています。
ROSを実行するには、最初にsource /opt/ros/kinetic/setup.bash
、次にroscore
を実行する必要があります。 roscore
をsource setup.bash
なしで実行すると、コマンドroscore
が見つかりません。
ここで、システムの起動中にROSを実行したいと思います。
私はこのリンクを読みました: https://askubuntu.com/questions/814/how-to-run-scripts-on-start-up
カスタムサービスファイルを作成して/etc/systemd/system/
に入れるだけでよいようです。ただし、roscore
を実行する前に、必要な環境変数をセットアップするためにsource setup.bash
を実行する必要があるため、何をすべきかわかりません。
サービスファイルで環境変数を設定することは可能ですか?私の必要に応じて、roscore
の実行だけでなく、システム全体にもこれらの環境変数を設定する必要があります。
私は別のアイデアを持っています。つまり、これらの環境変数を/etc/profile
に設定し、コマンドroscore
に対してのみサービスファイルを書き込みます。それは機能しますか?
通常、systemd
サービスには、/ etc/profile、/etc/profile.dおよびbashrc関連ファイルが設定されていません。
systemd
サービスの環境変数を追加するには、さまざまな可能性があります。
次の例では、roscore
サービスにバイナリまたはスクリプトをフルパスで構成する必要があるため、systemd
が/opt/ros/kinetic/bin/roscore
にあると想定しています。
1つの可能性は、Environment
サービスでsystemd
オプションを使用することです。単純なsystemd
サービスは次のようになります。
[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
また、EnvironmentFile
サービスのsystemd
オプションを使用して読み取ることができるファイルにすべての環境変数を配置することもできます。
[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
もう1つのオプションは、ros
バイナリ用のラッパースクリプトを作成し、そのラッパースクリプトをsystemd
サービスから呼び出すことです。スクリプトは、そのファイルの作成後にchmod +755 /opt/ros/kinetic/bin/roscore.startup
を確実に実行するために、実行可能である必要があります。
[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
サービスファイルを編集して変更をアクティブにした後、systemctl daemon-reload
を実行する必要があることに注意してください。システムブートでサービスを有効にするには、systemctl enable ros
を入力する必要があります。
私はroscore
バイナリに精通しておらず、Type=
をsimple
(デフォルトで通常は不要)からforking
に変更する必要があるかもしれません。最初の2つの例。
pdate、通常のログインの環境変数について言及するのを忘れていたため。
通常のログインの場合、/ opt/ros/kinetic/setup.bashを/ etc/profileにコピーまたはシンボリックリンクできます.d/ros.shこれは、通常のログインで供給される必要があります。