現在開発中のCプログラムである実行可能ファイルがあります。構成ファイルをロードします。これにより特定の動作が行われる。これはテストされ、シェルから起動すると機能します。
しかし、私はシステムから始めたいと思ってサービスを提供しています。サービスは起動時に実行可能ファイルを起動します。
これにより、プログラムは常にファイルが無視されたかのようにデフォルトの動作を持ちます。
理由があってこんなことが起こるのでしょうか?私の現在の推測では、何らかの理由でファイルにアクセスする準備ができていないときにプログラムが起動される可能性があります(私のプログラムは、ユーザーがシリアルポートを介してシステムにログインするずっと前に期待どおりにフレームバッファに書き込むためです)。
これが正しいかどうか、どのように修正できるかわかりません。よろしくお願いします。
答え1
実行可能ファイルは現在の作業ディレクトリで構成ファイルを探しますか?その場合、起動時に開始されたすべてのサービスは、サービスが明示的に別途/
指定しない限り、通常は作業ディレクトリがに設定されることに注意してください。
.service
ファイルで次の行を使用できます
WorkingDirectory=/home/user/demo
cd
必要なディレクトリに到達したサービスプロセスを開始します。man systemd.exec
詳細は参照してください。
それとも、実行可能ファイルが環境変数の値をHOME
構成ファイルのパス名の一部として使用しようとしますか?サービスはHOME
環境変数をまったく設定する必要はありません。必要に.service
応じて、次の行を使用してファイルに設定できます。
Environment="HOME=/home/user"
ただし、これはシステムサービスとして実行されているプログラムの場合、やや予期しないことです。代わりに、他の環境変数を使用HOME
して明示的に記録することもできます。
まだ指定していない場合は、プログラム内で設定ファイルの場所をフルパス名で指定できます。