起動時にシステムサービスエコーとpingが機能しません。

起動時にシステムサービスエコーとpingが機能しません。

起動時に起動し、特定のログ名前空間といくつかのdmesgをローカルにファイルに書き込む単純なワンシュートシステムサービスファイルをRaspberry Piに作成しました。

テストでローカルでスクリプトを実行すると動作するように見えますが、自動起動に問題があり、まったく動作しません。

テストサービス

[Unit]
Description=Test message
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/data/test.sh
StandardOutput=journal

[Install]
WantedBy=multi-user.target

システムはシンプルでコンテンツが多くありません。 rootユーザーのみが存在します。

さらに、システムはログに記録され、LogNamespace = temp_loggerを持つ温度ロガーを開始します。私はそれを依存関係や他のものに入れませんでした。

これで、次のものを含むtest.shファイルを実行します。

#!/bin/bash

echo $(date)
TEST_DIR=/data/testdirectory

mkdir -p $(TEST_DIR)

journalctl -f --namespace=temp_logger > ${TEST_DIR}/journaltemp.log &

dmesg -w > ${TEST_DIR}/dmesg.log &


とてもうまくいくようです。エラーもなく、何もありません。よさそうだねサービスを有効にしてsystemctl enable testシステムを再起動すると、いくつかの問題が発生するようです。

ディレクトリは生成されず、ログファイルは存在しません。 (テストから削除しました)

確認すると、systemctl status testecho、mkdirなどのコマンドが見つからないというエラーメッセージが表示されます。

echoor などのすべての呼び出しを etcmkdirに変更すると動作するようです。エコ、日付、ディレクトリを取得します。コマンドを使用してバイナリへのすべての呼び出しを確認し、パスを調整しました。/bin/echo/bin/mkdirwhich

しかし、ロギングが機能していないようです。ファイルがありますが、内容はありません(サイズ0)。

何の問題がありましたか?バイナリへの絶対パスを提供する必要があるのはなぜですか?なぜJournalctlが機能しないのですか?

ベストアンサー1

サービスには単純な依存関係があり、ロギングサービス自体が開始する前に開始されることがわかりました。

おそらくファイルがそこにある理由でしょう。ただし、サイズは常に0です。lsofdmesg.log または Journaltemp.log ファイルを表示するプロセスはありません。

私は sleep 5test.shファイルの先頭に良いol 'を置き、それから動作しました。

後で開始するサービスファイルにログを設定すると、より良いよりきれいな解決策があるかもしれませんが、理解することはできません。よく眠り、今私のtest.shの一部です。

おすすめ記事