実行可能ファイルがサービスとして実行されると、ファイルが見つかりません。

実行可能ファイルがサービスとして実行されると、ファイルが見つかりません。

私はRust学習の一環として、組み込みLinuxシステムでホストされている小さなWebサーバーを作成する方法を学んでいます。ラップトップでソフトウェアをコンパイルし、バイナリやその他のファイルを組み込みシステムにscpし、Webサーバーを起動するサービスを再起動します。

ただし、WebサーバーのIPに移動すると、そのファイルやディレクトリエラーなしで最初のHTMLファイルをインポートしようとすると競合が発生します。

SSH接続を介してサーバーを手動で実行すると、正常に機能し、ページが完全にロードされます。

私はこれが実行可能ファイルがsystemdから取得されたルートディレクトリに関連していると思いますが、相対パスまたは絶対有効なファイルパスを見つけることができません。

誰かが何が起こっているのか、どのように機能させることができるのかを説明できますか?変更するたびにファイルを手動で実行したくないので、アップロードスクリプトをローカルで実行したいと思います。

現在のファイルは以下の通りです。 /home/web_server は実行可能ファイルで、/home/index.html はクライアントに送信する必要がある HTML ファイルです。

私はそれを動作させることもできません:

use std::{
    env,
    path::Path,
}
let root = Path::new("/home/");
assert!(env::set_current_dir(&root).is_ok());

.サービスファイル:

[Unit]
Description=Web server service
DefaultDependencies=no

[Service]
ExecStart=/home/web_server
Type=simple
RemainAfterExit=yes

[Install]
WantedBy=sysinit.target

カーネル5.10.72でDebian 11を実行する組み込みシステム

答え1

実行可能ファイルの作業ディレクトリを変更するには、WorkingDirectory=/home ファイル[service]フィールドを入力する必要があります。.service

関連情報