일회성 시스템 장치와 루트 명령줄의 차이점은 무엇입니까?

일회성 시스템 장치와 루트 명령줄의 차이점은 무엇입니까?

내 설정에는 exim 명령줄을 통해 로컬 사용자에게 메일을 보내는 스크립트가 포함되어 있습니다. 스크립트는 루트라고 합니다(현실은 물론 더 복잡하지만 이는 최소한의 작업 예제인 것 같습니다).

/home/jens/send_mail:
#!/bin/sh
cat /home/jens/testmail | /usr/bin/exim -bm jens

루트 셸에서 이 스크립트를 실행하면 정상적으로 작동합니다. 메일이 성공적으로 전달되었습니다.

이제 이 스크립트를 자동화하고 systemd 서비스에서 호출하려고 합니다.

/etc/systemd/system/send_mail.service:
[Unit]
Description=Send mail to jens

[Service]
Type=oneshot
ExecStart=/home/jens/send_mail

[Install]
WantedBy=multi-user.target

실행에서는 systemctl start send_mail.service메시지를 전달하지 않지만 나중에 전달하기 위해 exim 큐에 넣습니다. 실제 설정에서는 해당 줄이 읽고 있는 것으로 나타났습니다.

... exim[275968]: 2020-07-16 23:09:40 1jwB8O-0019n4-Lj failed to write to main log: length=91 result=-1 errno=9 (Bad file descriptor)
... exim[275968]: write failed on panic log: length=116 result=-1 errno=9 (Bad file descriptor)

내 일기장에. 내가 아는 한, 내 루트 쉘에는 exim 관련 환경 변수가 없습니다. 이렇게 다른 행동이 나타나는 이유는 무엇일까요?

저는 Arch Linux에서 exim 4.94를 사용하고 있습니다. 자세한 내용이 필요하면 문의하세요.

답변1

send_mail이 문제는 실행이 완료되는 즉시 생성된 exim 프로세스를 종료하는 systemd로 인해 발생한 것으로 보입니다.

이 문제는 종료 시 적절한 시간 동안 기다리 send_mail거나 KillModesystemd 장치의 옵션을 process또는 로 설정하면 none해결 될 수 있습니다(설명서에서는 이렇게 하지 말 것을 권장함).

원천:

  1. https://systemd-devel.freedesktop.narkive.com/nV1QMO8j/exim4-only-queues-mails-sent-by-systemd-service
  2. https://www.freedesktop.org/software/systemd/man/systemd.kill.html

관련 정보