次のようにインストールするサービスがあります:
install -m 755 init_script /etc/init.d/spacenavd
cd /etc/rc2.d
ln -s ../init.d/spacenavd S99spacenavd
init_script はスクリプトを開始します:
/usr/local/bin/spacenavd -v
これらはすべて正常に動作し、起動時にサービスが自動的に開始されます。ただし、spacenavd サービスを使用する別のスクリプトを起動時に実行する際に問題が発生しています。このスクリプトは、ログイン後に手動で実行すると正常に動作します。ただし、起動時に実行すると、rc.local に配置すると動作しません。
rc.local で次の操作を行います。
cd /home/filedirec
sudo ./my_script &
これは時々機能し、時々機能しません。原因が何であるかを特定できないようです。トラブルシューティングの良い方法は何ですか?
答え1
既視感。
sudoは、最近資格情報を入力していない場合、root(または他のユーザー)としてコマンドを実行するためにパスワードの入力を要求する対話型プログラムです。rc.localスクリプトはコンソールに接続されていないため、パスワードを要求するメッセージが表示されることはありません。
のrc.localスクリプトもすでにルートとして実行されているので、須藤そこからコマンドを実行します。
さらに良いのは、追加したすべてを次のように置き換えることです。/home/filedirec/my_script(または/home/filedirec/my_script &絶対パスを使用すると、rc.localスクリプトが何をしているかを後で確認する必要がある場合、CDなどは、一般的に対話型シェルの方が適しています。
答え2
1つできることは、スクリプトを別の場所で開始することです画面セッション。
たとえば、rc.local ファイルは次のようになります。
/usr/bin/screen -dmS my_script bash -c '/home/filedirec/my_script'
起動後に画面を簡単に「再接続」して、スクリプトで何が起こっているかを確認できます。出力をファイルに記録することもできます。
システムで screen コマンドが使用できない場合:sudo apt-get install screen
写真付きのチュートリアル: 画面: 接続が切断されてもプロセスを実行し続ける