私は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-journald
my_script.sh
my_c_program > /dev/null &
echo $! > /dev/shm/my_c_program.pid
のメッセージはjournald
表示されませんが、問題は
なぜ私のCプログラムのすべての出力がstdoutに送信されるのでしょうかjournald
?
ありがとう
たとえば、次のコードを使用してjournald
C命令を使用する必要があるというメッセージを送信したいとします。syslog()
#include<syslog.h>
int main(int argc, char** argv) {
syslog(LOG_INFO, "Start logging");
}
ベストアンサー1
Systemd は実行プロセスの標準出力をログにリンクします。標準出力はすべての子プロセスから継承されるため、C プログラムはコンテンツをログに出力します。あなたはそれを使用することができます標準出力=引数はプログラムの標準出力を別の場所にリダイレクトします。