web-dev-qa-db-ja.com

rc.localでスクリプトを実行する方法

私はこのプラットフォームに新しいです。 rc.localについて質問があります。自動的に実行するスクリプトを作成しましたroscoreおよびroslaunch rosbridge_server rosbridge_websocket.launch 。このスクリプト名はautoで、スクリプトの内容は次のとおりです。

#!/bin/sh
cd $home
xterm -hold -e "roscore" &
xterm -hold -e "roslaunch rosbridge_server rosbridge_websocket.launch"
exit 0

このスクリプトをrc.localで実行する必要があります。作成されるrc.localファイルは次のとおりです。

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

Sudo auto.sh
sh '/home/moguztas/auto.sh'

exit 0

どこで間違っていますか? 起動時に "rc.local"を実行するにはどうすればよいですか? で9ステップのソリューションに従いますが、実行されませんでした。

4
moguztas

問題は完全に解決しました。解決策を以下に示します。

まず、実行するスクリプトを作成します。コンピューターの起動時にrosbridge_websocketを自動的に実行したい。スクリプト名はautoで、home/username/auto.shにあります。スクリプトの内容は次のとおりです。

#!/bin/bash

cd $home

source /opt/ros/Indigo/setup.bash 

roslaunch rosbridge_server rosbridge_websocket.launch

exit 0

スクリプトファイルが実行可能であることを確認する必要があります。実行可能なスクリプトファイルには、コマンド$ Sudo chmod u+x /home/username/auto.shを使用します

rc.localにある/etc/rc.localでこのスクリプトを実行するには。 gksudo gedit /etc/rc.localを使用して作成されます。 rc.localの内部:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/home/username/auto.sh

exit 0

最後に、$ Sudo rebootを使用してシステムを再起動する必要があります。コンピューターを起動すると、スクリプトは完全に機能します。

1
moguztas

rc.localは、グラフィカルユーザーインターフェイス(Xなど)が使用可能になる前に実行されます。したがって、スクリプトのxtermの実行auto.shは失敗します。起動時にxtermをポップアップする場合は、Ubuntuの「スタートアップアプリケーション」を使用して開く必要があります。 /etc/sudoersにNOPASSWDエントリを設定し、rootのみが編集できるようにする必要があるため、root権限でスクリプトを実行することはもう少し進化します。

starup applications

1
con-f-use