Termux:TaskerやTermux:Widgetでcannot execute: required file not foundとなる問題

投稿者: | 12月 21, 2022

結論から言うと原因はわからないため、回避方法の提示となります。

きっかけ

以前の記事でHomebridgeをTermux上で実行しましたが、端末の起動時に実行させるようにしたかったため、MacrodroidとTermux:Taskerを組み合わせて実行することにしました。そこで下に記すようなスクリプトを~/.termux/tasker/に書いて、Termux:Taskerで実行してみました。

#!/data/data/com.termux/files/usr/bin/bash
/data/data/com.termux/files/home/.homebridge/homebridge-run.sh &

これを実行してみたところ、/data/data/com. termux/files/home/.homebridge/homebridge-run.sh: line 4: /data/data /com. termux/files/us/bin/homebridge: cannot execute: required file not foundというエラーが繰り返しでるだけでした。もちろん、手動でスクリプトをTermuxで実行すると、なんのエラーもなく実行できます。不思議です。

原因探求

スクリプトがおかしいのかと思って、スクリプト内でbashを表示するよう(下のコード)にしてみましたが、このbash内でもHomebridgeは同様のエラーとなりました。ちなみに他の、ps、vim、lsなどのコマンドはエラーなく実行できました。ユーザも、パスも通常と同じでした。

#!/data/data/com.termux/files/usr/bin/bash
id
echo $PATH
homebridge
bash

他に違いと言ったらログイン時のwelcome to termuxとかのメッセージが流れるかどうかです。これはloginプロセスによって行われます。これに原因があるかもということでそのスクリプトを追加してみました。

#!/data/data/com.termux/files/usr/bin/bash
login
id
echo $PATH
homebridge
bash

loginでコンソールに入ってしまいますが、homebridgeと実行してみると…無事に実行できました。って、ことはlogin時に実行された何かしらの処理が原因のはずなので、/data/data/com.termux/files/usr/etc/下にある、あるとあらゆるスクリプトファイルを実行し、bash.bashrcを読み込んだりしましたが、ダメでした…

回避方法

先程使ったログイン時に実行されるスクリプトを活用します。/data/data/com.termux/files/usr/etc/termux-login.shにはlogin時に記述するとログイン時に実行されるっぽいので、

##
## This script is sourced by /data/data/com.termux/files/usr/bin/login before executing shell.
##
echo start start.sh
/data/data/com.termux/files/home/start.sh
echo end start.sh

と、下3行追記して、/data/data/com.termux/files/home/start.shには

#!/data/data/com.termux/files/usr/bin/bash
#ログイン時に毎回実行されます。
ps=`ps -A | grep start_was_done -o`
if [ -z $ps ]; then
	#このif文内部は端末起動後一回しか実行されません。
	echo run start.sh
	#画面消灯無効化
	termux-wake-lock

	#sshdの開始
	sshd

	#homebridgeの開始
	.homebridge/home_bridge-run.sh &

	./start_was_done.sh &
else
	echo stert.sh already done
fi

と記述します。start_was_done.shが実行されているかどうかで、初回起動かどうかを判断します。ってわけでstart_was_done.shには

#!/data/data/com.termux/files/usr/bin/bash
while :
do
	sleep 3600
done

と記述しました。ちなみに、.homebridge/home_bridge-run.shの中身は前回の記事の.homebridge/homebridge-run.shです。~/start.shのif文の中に書くことによって、初回起動時に実行可能です。これと、MacroDroidを組み合わせて、端末起動後にTermuxを起動するようにすることによって、起動時に実行可能です。

終わりに

ログインしないといけないってところまでは分かったんですけどねー私の拙い知識では、そこで止まってしまいました。そもそも、実行できないプログラムがnpmで落としてきたプログラムなので、Node.js側の設定の問題の可能性もあります。結構頑張ったんですが、Termux上のHomebridgeがリストラになったので徒労でした。トホホ…

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)