起動時にinit.dスクリプトから呼び出されるbashスクリプトがあります。このスクリプトを複数回再起動する必要があるため、スクリプトが機能していることを確認する中間ファイルを生成します。私の問題は、init.dスクリプト(bashに少し新しいものなので、これが技術的にスクリプトと呼ばれるかどうかはわかりません)によって呼び出されたスクリプト内で、「スクリプト」が実際の作業を実行する別のスクリプトを呼び出すことです。実行されず、エラーは発生しません。 checkversion.sh arg1 arg2 です。エラーが発生しないファイルにstderr出力をパイプしました。意図的に間違ったファイルパスを入力した場合、これが発生します。スクリプトを呼び出した後、いくつかの出力ファイルを使用していることがわかります。これらのファイルはアクセスできるように正しく入力されています。私は明らかなものを見逃していますか?
基本構造:/etc/init.d/myupdateは/usr/bin/databases/runcheckversion.shを呼び出し、最後に/usr/bin/databases/checkversion.shを呼び出しますが、checkversion.shは決して実行されません。出力されません。 。これがPATH仕様に関連している可能性があると思いますか?
/etc/init.d/myupdate コード:
#! /bin/sh
### BEGIN INIT INFO
#Provides: myupdate
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
case "$1" in
start)
/usr/bin/databases/runcheckversionwithupdate.sh
;;
stop|restart|reload)
;;
esac
/usr/bin/databases/runcheckversion.sh コード:
#! /bin/sh
after_reboot()
{
versionNumber=$(< /usr/bin/databases/afterreboot.txt);
#This following command never executes and theres no error output
sudo /usr/bin/databases/checkversion.sh $versionNumber /usr/bin/databases/my.db.sqlite 2> didntwork.txt
((versionNumber++));
echo $versionNumber>/usr/bin/databases/afterreboot.txt;
}
if [ -f /usr/bin/databases/afterreboot.txt ]; then
sleep 20
after_reboot
checkVersion=$(< /usr/bin/databases/afterreboot.txt)
if(($checkVersion < 2)); then
sudo reboot
fi
echo "DONE"
else
echo "1">/usr/bin/afterreboot.txt;
echo "worked"
sudo reboot
fi
答え1
after_reboot() 関数を呼び出す前に存在するかどうかを確認するファイルは、/usr/bin/databases/afterreboot.txt
ただし、1をエコーしたいファイル(上記のファイルがない場合)は/usr/bin/afterreboot.txtです。
したがって、1つのファイル(/usr/binに)を作成し、別のファイル(/usr/bin/databasesに)を確認するようです。
以下が機能する可能性があります。
#! /bin/sh
after_reboot()
{
versionNumber=$(< /usr/bin/databases/afterreboot.txt);
#This following command never executes and theres no error output
sudo /usr/bin/databases/checkversion.sh $versionNumber /usr/bin/databases/my.db.sqlite 2> didntwork.txt
((versionNumber++));
echo $versionNumber>/usr/bin/databases/afterreboot.txt;
}
if [ -f /usr/bin/databases/afterreboot.txt ]; then
sleep 20
after_reboot
checkVersion=$(< /usr/bin/databases/afterreboot.txt)
if(($checkVersion < 2)); then
sudo reboot
fi
echo "DONE"
else
echo "1">/usr/bin/databases/afterreboot.txt;
echo "worked"
sudo reboot
fi