私のCプログラムのすべての出力がstdoutに渡され、Journaldに送信されるのはなぜですか?

私のCプログラムのすべての出力がstdoutに渡され、Journaldに送信されるのはなぜですか?

私はyoctoベースのLinuxディストリビューションに取り組んでいます。私はこれの専門家でもないしsystemd、私でもないsystemd-journald
私のCプログラムはmy_c_program起動時にスクリプトによって起動されますmy_script.sh。ファイルは次のとおりですmy_script.sh

my_c_program &
echo $! > /dev/shm/my_c_program.pid

以前のスクリプトはサービスによって開始されます。サービスの単位ファイルはstart_c_program.service次のとおりです。

[Unit]
Description=Start my_c_program
Requires=...
After=...
Before=...

[Service]
Type=forking
ExecStart=/usr/bin/my_script.sh
PIDFile=/dev/shm/my_c_program.pid

[Install]
WantedBy=multi-user.target

この設定を使用すると、すべてのディレクティブprintf("message")が 。次のように変更するとわかります。my_c_program"message"systemd-journaldmy_script.sh

my_c_program > /dev/null &
echo $! > /dev/shm/my_c_program.pid

のメッセージはjournald表示されませんが、問題は
なぜ私のCプログラムのすべての出力がstdoutに送信されるのでしょうかjournald

ありがとう


たとえば、次のコードを使用してjournaldC命令を使用する必要があるというメッセージを送信したいとします。syslog()

#include<syslog.h>
int main(int argc, char** argv) {
    syslog(LOG_INFO, "Start logging");
}

ベストアンサー1

Systemd は実行プロセスの標準出力をログにリンクします。標準出力はすべての子プロセスから継承されるため、C プログラムはコンテンツをログに出力します。あなたはそれを使用することができます標準出力=引数はプログラムの標準出力を別の場所にリダイレクトします。

おすすめ記事