裸のLinuxディストリビューションを含むIoTデバイスがあります。いいえcrontab
、chkconfig
またはupdate-rc
。
デバイスのすべてのエントリがロードされた後にデバイスが起動したときにスクリプトをどのように実行しますか?スクリプトを追加できると思いましたが、/etc/init.d
何も起こらないようです。これが私が使用するスクリプトです。
#! /bin/sh -e
# /etc/init.d/camstart
. /etc/init.d/functions.sh
start() {
/usr/local/packages/application/myapp
}
stop() {
kill `pidof myapp`
kill `pidof myappinternal`
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
pidof myapp
pidof myappinternal
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0
私が持っているもう一つのアイデアはを使用することでしたが、/etc/rc.local
デバイスにそのファイルがありません。rc?.d
1〜6からSまでのフォルダがあります。どちらにスクリプトを置くのは効果がないようです。
どんな提案がありますか?
編集:どのLinuxディストリビューションかはわかりませんが、確認の結果、/etc/*release
YoctoプロジェクトのPokyに基づいていることがわかりました。/proc/version
Linux バージョン 4.9.62 から始まります。
私が知っている限り、サービスを開始systemctl
するために使用されますsystemd
。
EDIT2:言及するのを忘れました。systemd
私のスクリプト用のサービスを作成し、それを使用して起動しようとしましたが、systemctl start app
すぐに終了しますexit code 0
。
アプリケーションサーバー:
[Unit]
Description=app
After=acap-pre.target
Requires=acap-pre.target
[Service]
Slice=extension-acap.slice
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/init.d/app start
ExecStop=/etc/init.d/app stop
最終編集:確認したら正常に動作します。システム起動スクリプトを作成する方法私のものがsystemd service
なくなったのを見つけました。
[Install]
WantedBy=multi-user.target
答え1
ランレベル3でデーモンを自動的に起動するプロセスは簡単です。
- スクリプトをに入れて
/etc/init.d
、 - スクリプトの権限と所有権を確認し、
/etc/rc3.d
次の名前を使用してスクリプトへのシンボリックリンクを作成しますS99scriptmame
。
S
方法サービス開始。この数字は、01
(最も高い優先順位スクリプト)から99
(最後の優先順位スクリプト)までのサービス開始順序の順位付けに使用されます。
/etc/rc0.d
/etc/rc6.d
おそらく、名前付き(stop)と(restart)からスクリプトリンクを作成する必要があるかもしれませんK01scriptname
。通常、最後に始まったデーモンは最初に停止します。
バラよりman init.d
^1完全な説明のために。