こんにちは。ピャペロンです!
今回はパペロ起動時にプログラムを自動的に実行してみた!
使用するハード
・PaPeRo i実機
使用するソフト
・Windows 10
・テキストエディタ(Visual Studio Code)
・Python 3.4(PaPeRo i)
・WinSCP
・Tera Term
トピック: 独立実行方法について | PaPeRo i [非公式] Developer Forum
のソースコードを参考に[start][stop][restart]で制御できるように改造したよ。
Linux起動の仕組みを理解しよう[rcスクリプト編]:Windowsユーザーに教えるLinuxの常識(最終回) – @IT
を参考にファイル名を[S99z-app]で作成しよう。
- #!/bin/sh
- # アプリケーションの場所と名前を指定
- APPDIR=/Extension/apps/
- APP=app
- # 一定時間待ってもWebsocket制御シナリオが起動しない場合に、起動を中止するか否か
- # (0:中止しない、数値:待機秒数)
- SCA_TIMEOUT=0
- # ----
- . /Extension/local/etc/sh.profile
- . /Extension/local/etc/sh.rc
- start() {
- while ! pgrep sys_mgr > /dev/null; do sleep 1; done #シスマネが起動していない場合
- i=0
- while ! grep "00000000:1F98" /proc/net/tcp > /dev/null; do
- if [ ${SCA_TIMEOUT} -gt 0 ]; then #SCA_TIMEOUTが0より大きければ
- : $((i++)) #算術式 i+1
- if [ $i -ge ${SCA_TIMEOUT} ]; then #iの値がSCA_TIMEOUT以上なら
- exit 1 #タイムアウト
- fi
- fi
- sleep 1
- done
- echo starting ${APP}
- python3 ${exec_name} -wssvr ws://127.0.0.1:8088/papero >/var/log/${APP}.log 2>/var/log/${APP}_error.log & #アプリケーションをバックグラウンドで実行
- }
- stop() {
- i=0
- while pgrep -f "python3 ${exec_name}" > /dev/null; do #アプリケーションが起動している場合
- pid=`pgrep -f "python3 ${exec_name}"` #プロセスIDを取得
- if [ $i -ge 7 ]; then #iが7以上なら
- kill -KILL ${pid} #アプリケーションを強制キル
- else
- kill -TERM ${pid} #アプリケーションをキル
- fi
- sleep 2
- : $((i++))
- done
- }
- restart() {
- stop
- start
- }
- cd $APPDIR
- if [ -f ${APP}.py ]; then
- exec_name=${APP}.py
- elif [ -f ${APP}.pyc ]; then
- exec_name=${APP}.pyc
- else
- echo "Application not found: `pwd`/$APP.[py|pyc]" > /var/log/app.sh.error.log
- exit 1
- fi
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart)
- restart
- ;;
- *)
- echo "usage: $0 { start | stop | restart }" >&2
- exit 1
- ;;
- esac
- exit 0
作成したスクリプトをWinSCPで[/tmp/]に転送してTera Termで[/Extension/script/]に移動させたら、[S99z-app]と[app.py]を
[chown root ファイル名]
[chmod 755 ファイル名]
と実行して、所有者と権限を変更しよう。
これで[app.py]がパペロ起動時に実行されるはずだ!
0