
나는 정기적으로 장기 실행(~5일) 데이터 처리 프로그램을 수행하고 있습니다. 저는 Ubuntu를 사용하고 있으며 systemd-run --unit data_import /path/to/my-script.sh
. 잘 작동합니다. 를 사용하여 스크립트의 로깅 표준 출력을 볼 수 있습니다 journalctl -u data_import.service
.
스크립트의 stdout(& stderr)을 시스템 저널뿐만 아니라 파일에도 저장하고 싶습니다. 나는 systemd-run --unit data_import -p "StandardOutput=file:/path/my-logging-file.txt …
그 파일에 stdout을 저장할 것이라는 것을 알았습니다. 그러나 저널링에는 기록되지 않습니다. 나는 인수를 두 번 제공하려고 시도했지만 systemd-run -p "StandardOutput=file:/path/my-logging-file.txt" -p "StandardOutput=journal" …
작동하지 않았습니다.
systemd를 사용하여 stdout을 파일에 기록하는 것이 가능합니까?그리고시스템 저널에? (stderr도 마찬가지인가요?)
우분투 18.04 및 20.04, 시스템 v250. 또는 v245 등
답변1
내 생각엔 우리가 참조를 하나밖에 찾을 수 없을 것 같아https://www.freedesktop.org/software/systemd/man/systemd.exec.html#StandardOutput=도움이 될 수도 있습니다 (주의를 기울이십시오다음 중 하나를 사용합니다.끈).
실행된 프로세스의 파일 디스크립터 1(stdout)이 어디에 연결되는지 제어합니다.다음 중 하나를 사용합니다.상속, null, tty, 저널, kmsg, 저널+콘솔, kmsg+콘솔, 파일:경로, 추가:경로, 자르기:경로, 소켓 또는 fd:이름.
기본 표준 출력 유형을 변경할 수는 있지만.
답변2
스크립트에 직접 로그 파일을 생성하고 필요할 때마다 정보를 추가하려고 했습니까? 나는 그것이 매우 명백하다는 것을 알고 있지만 그것이 작동하는지 궁금합니다.
예를 들어 bash를 사용하면 스크립트에서 직접 다음을 수행할 수 있습니다.
# Declaration
LOG=/var/log/your_script_log.log
# Or with a date
TODAY=$(date +%Y-%m-%d)
LOG=/var/log/your_script_log-$(TODAY).log
...
# Beginning of main script
echo -e $TODAY > $LOG
...
# Every time needed during the script
if [[ $state == *"stopped"* ]];then
echo "A very important message." >> $LOG
...
이와 같은 시스템에서는 몇 달 후에 수백 개의 로그가 발생하지 않도록 logrotate를 구성해야 합니다.
답변3
@Amandasaurus 알겠습니다. 이해합니다. 그런 다음 "/etc/systemd/system/[스크립트 이름].service" 아래에 서비스 파일을 생성하고 필요한 최소한의 정보를 추가하는 것이 좋습니다.
[Unit]
Description=*The name of your script*
[Service]
ExecStart=/path/to/my-script.sh
ExecStop=/bin/kill $MAINPID
KillMode=process
Type=simple
StandardOutput=/path_to_log/service.log
StandardError=/path_to_log/service_error.log
[Install]
WantedBy=multi-user.target
그런 다음 logrotate를 구성하거나 StandardOutput 인수에 "추가"를 추가합니다. 그 후 다음을 수행하십시오.
systemctl daemon-reload
systemctl start *The name of your service*
서비스 부팅 시 시작을 활성화하려면 다음을 수행하세요.
systemctl enable *The name of your service*
서비스 파일의 로그 인수 소스:여기