터미널에서 프로그램을 실행하고 stdout 및 stderr을 systemd 로그로 리디렉션하는 방법은 무엇입니까?

터미널에서 프로그램을 실행하고 stdout 및 stderr을 systemd 로그로 리디렉션하는 방법은 무엇입니까?

GNOME의 Alt + F2와 같이 터미널에서 명령을 실행하여 stdout 및 stderr을 systemd의 로그로 리디렉션하는 쉬운 방법이 있습니까?

나는 gmrun(출력을 리디렉션하지 않음), gtk-launch(/usr/share/applications의 .desktop 파일에서만 작동)를 시도했습니다.

이를 수행하는 GNOME 또는 systemd 명령이 있습니까?

답변1

나는 당신이 이 logger(1)유틸리티를 사용해야 한다고 생각합니다. systemd시스템이 를 사용하든 사용하지 않든 작동할 것입니다 rsyslogd.

your_prog 2>&1 | logger -t your_prog

systemd가 있는 시스템에는 표준 API 대신 systemd를 특별히 사용하는 systemd-cat"스트리밍" 로깅 API( sd_journal_stream_fd(3), ) 도 있습니다 ./run/systemd/journal/stdoutsyslog(3)

your_prog 2>&1 | systemd-cat -t your_prog

systemd-cat -t your_prog your_prog

다른 검색을 저장하려면: stdout 대신 stderr을 파이프하려면 다음을 사용할 수 있습니다.

log_stderr(){ { "$@" 2>&1 >&3 3>&- | logger -t "$1"; } 3>&1; }
log_stderr your_prog

답변2

systemd-run --user ...

불행하게도 가장 사용자 친화적인 모드는 기본적으로 사용되지 않습니다.

기본적으로 생성된 서비스 systemd-run의 기본 유형은 simple[...] 입니다 . 지정된 명령줄이 성공적으로 시작된 경우에만 성공적인 반환이 이루어지도록 exec서비스 유형(예: --property=Type=exec) 을 사용하는 것이 좋습니다.systemd-run

이 보다 유용한 설정은 나중에 추가되었습니다. 개인적으로 저는 이 세부사항을 기억하지 못할 것 같습니다. 그래서 저는 짧은 래퍼 스크립트를 사용하는 것을 선호합니다.

관련 정보