私はROSを使用しており、Ubuntuに正しくインストールされました。
source /opt/ros/kinetic/setup.bash
ROSを実行するには、まず実行する必要がありますroscore
。roscore
実行しないと、source setup.bash
コマンドが見つかりません。roscore
今、システムの起動時にROSを実行したいと思います。
私は次のリンクを読んだ。https://askubuntu.com/questions/814/how-to-run-scripts-on-start-up
ただカスタムサービスファイルを作成してに入れると思います。しかし、実行する前に必要な環境変数を設定する/etc/systemd/system/
必要があるため、まだ何をすべきかわかりません。source setup.bash
roscore
サービスファイルに環境変数を設定できますか?必要に応じて、roscore
実行だけでなくシステム全体に対してこれらの環境変数を設定する必要があります。
/etc/profile
また、これらの環境変数を設定し、コマンドのサービスファイルを作成するという考えもありますroscore
。大丈夫ですか?
答え1
通常、systemd
サービスには制限された環境変数セットのみがあり、および関連ファイルの内容は/etc/profile
設定されません。/etc/profile.d
bashrc
systemd
サービスの環境変数を追加するには、さまざまな可能性があります。
次の例では、サービスがバイナリまたはスクリプトをフルパスに設定する必要があるため、roscore
atを想定しています。/opt/ros/kinetic/bin/roscore
systemd
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/ros/roscore.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/ros/roscore.env
ExecStart=/opt/ros/kinetic/bin/roscore
[Install]
WantedBy=multi-user.target
別のオプションは、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
バイナリに慣れていませんが、最初の2つの例(デフォルトであり、通常は必要ありません)のバイナリをType=
。simple
forking
/opt/ros/kinetic/setup.bash
通常のログインの場合にコピーするか、シンボリックリンクをかけることができます。/etc/profile.d/ros.sh
これは通常のログインで選択する必要があります。
答え2
これを試すことができます
[Unit]
Description=Run command with source /opt/ros/kinetic/setup.bash
[Service]
Type=simple
ExecStart=/bin/bash -c 'source /opt/ros/kinetic/setup.bash && /opt/ros/kinetic/bin/roscore'
[Install]
WantedBy=multi-user.target