BeagleBone が起動したときに実行したいa.out
があります。これは実際には、BeagleBoneの電源が入るとすぐに起動したいソケットサーバーです。これを/etc/init.d
に入れようとしましたが、役に立ちませんでした。この実行可能ファイルを実行するためのシェルスクリプトを作成しましたが、それでも役に立ちませんでした。
スクリプトが起動したらすぐに実行するにはどうすればよいですか?
これを理解するのにかなりの時間がかかりましたが、たくさんの研究を重ねて、ついに探していたものを見つけました。
必要なコードをコンパイルします。
起動/起動時にコードを起動するbashスクリプトを作成します
cd /usr/bin/
タイプnano scriptname.sh
#!/bin/bash
/home/root/name_of_compiled_code
保存して実行権限を付与する
chmod u+x /usr/bin/scriptname.sh
サービスを作成する
nano /lib/systemd/scriptname.service
必要に応じて上記のファイルを編集して、ネットワークなどのさまざまな機能を呼び出します。コードがその特定のサービスを必要とする場合にのみ、これらを有効にしてください。不要なものを無効にして、起動時間を短縮します。
[Unit]
Description=description of code
After=syslog.target network.target
[Service]
Type=simple
ExecStart=/usr/bin/scriptname.sh
[Install]
WantedBy=multi-user.target
シンボリックリンクを作成して、デバイスにサービスの場所を知らせます。
cd /etc/systemd/system/
ln /lib/systemd/scriptname.service scriptname.service
Systemdに構成ファイルをリロードさせ、サービスをすぐに開始し(サービスが正しく機能しているかどうかを確認するのに役立ちます)、コマンドラインで指定されたユニットファイルを有効にします。
systemctl daemon-reload
systemctl start scriptname.service
systemctl enable scriptname.service
BBBをすぐに再起動して、意図したとおりに実行されるかどうかを確認します。
reboot
(すべてのクレジットは http://mybeagleboneblackfindings.blogspot.com/2013/10/running-script-on-beaglebone-black-boot.html に送られます)
7つの手順に従ってサービスを作成しましたが、機能しません。次に、シェルスクリプトコマンドを使用して、プログラムを/etc/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.
cd /home/my_program_directory
/home/my_program_directory/my_executable
exit 0