0

私の投稿を読んでくれてありがとう。init.d スクリプトからプログラムを開始すると、プログラムの動作が異なるという問題があります。これは、2 つのプロパティ ファイルと共に /usr/local/bin ディレクトリに格納している C++ プログラムです。プログラムを正しく実行するには、プロパティ ファイルの 1 つが必要です。次のようなコマンドラインからプログラムが呼び出されると、すべてが正常に機能します。

myprogram または ./myprogram

しかし、init.d スクリプトを使用してプログラムを起動すると、バイナリは必要なプロパティ ファイルを開きません。init.d スクリプト (chmod 755) のアクセス許可を確認し、rc.d (sudo update-rc.d myprogram defaults) を更新したことを確認しましたが、これを理解できませんでした。init スクリプトの LSB ヘッダーは次のようになります。

#!/bin/bash 
### BEGIN INIT INFO
# Provides:         myprogram (where myprogram is the name of the init script)
# Required-Start:       $local_fs $network $remote_fs $syslog
# Required-Stop:        $local_fs $network $remote_fs $syslog
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    myprogram short description
# Description:      Enable service provided by daemon
### END INIT INFO

どんな助けでも本当に感謝しています。ありがとう。

4

2 に答える 2

1

相対パスを使用してファイルを開くため、ここで問題が発生する可能性が最も高くなります。スクリプトからアプリケーションを起動するときの作業ディレクトリは、スクリプトが存在するディレクトリであり、アプリケーションが存在するディレクトリではありません。そのため、相対パスを使用してファイルを見つけると、それらはスクリプトのディレクトリに相対的です。そのため、スクリプトから実行するときはそれらを見つけることができませんが、コマンドラインから直接実行するときは見つけることができます.

この理論は、スクリプトをアプリケーションのディレクトリに移動して実行することでテストできます。スクリプトとアプリケーションが同じディレクトリにあるときにスクリプトから動作する場合、私は正しいです。

あなたのコードを持っていないので、何も確信が持てません。

于 2013-07-23T01:50:42.167 に答える