postfix
시스템을 다시 시작한 후 서비스가 시작되지 않습니다. 우리는 OpenSuse 12.1을 기반으로 한 맞춤형 Linux 운영 체제를 사용하고 있으며 최근 검증 부서 /var
에서 postfix
.
누가 이 이메일을 보냅니까? 시스템 간에 일부 로그를 공유하는 일부 애플리케이션이 있습니다.
답변을 찾기 위해 다양한 유형의 포럼을 살펴봤지만 성공하지 못했습니다.
라이베르 이후:
$systemctl status postfix.service
postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/etc/systemd/system/postfix.service; enabled)
Active: inactive (dead)
CGroup: name=systemd:/system/postfix.service
여기서 찾았어요재부팅 시 Postfix가 시작되지 않습니다.문제가 와 충돌할 수 있습니다 sendmail
. sendmail
프로그램이 다음과 잘 연결되는지 확인하려면 postfix
:
$ ldd /usr/sbin/sendmail
linux-vdso.so.1 => (0x00007fffa25ff000)
libpostfix-global.so.1 => /usr/lib64/libpostfix-global.so.1 (0x00007fdb174d2000)
libpostfix-util.so.1 => /usr/lib64/libpostfix-util.so.1 (0x00007fdb1729a000)
libc.so.6 => /lib64/libc.so.6 (0x00007fdb16f0a000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fdb16d06000)
libdb-4.8.so => /usr/lib64/libdb-4.8.so (0x00007fdb1698a000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fdb16772000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdb1770b000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fdb16555000)
저도 확인해봤는데 실패 해도 /var/log/messages
이상없습니다 .sendmail
postfix
서비스를 시작해 보겠습니다.
$ systemctl start postfix.service
$ systemctl status postfix.service
postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/etc/systemd/system/postfix.service; enabled)
Active: active (running) since Sat, 28 Jan 2017 21:49:37 +0300; 41s ago
Process: 3450 ExecStartPost=/etc/postfix/system/cond_slp register (code=exited, status=0/SUCCESS)
Process: 3444 ExecStartPost=/etc/postfix/system/wait_qmgr 60 (code=exited, status=0/SUCCESS)
Process: 3368 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
Process: 3366 ExecStartPre=/etc/postfix/system/update_chroot (code=exited, status=0/SUCCESS)
Process: 3363 ExecStartPre=/bin/echo Starting mail service (Postfix) (code=exited, status=0/SUCCESS)
Main PID: 3443 (master)
CGroup: name=systemd:/system/postfix.service
├ 3443 /usr/lib/postfix/master
├ 3445 pickup -l -t fifo -u
├ 3446 qmgr -l -t fifo -u
├ 3447 cleanup -z -t unix -u
├ 3466 trivial-rewrite -n rewrite -t unix -u
├ 3467 local -t unix
├ 3468 local -t unix
└ 3469 local -t unix
좋아요 시스템을 다시 시작하면 서비스가 다음으로 변경됩니다.비활성(죽음). 돌아와서 /var/log
이 파일을 찾았어요mail.warn
$ cat mail.info
Jan 28 03:13:55 msx postfix/postfix-script[2527]: warning: not owned by group maildrop: /usr/sbin/postqueue
Jan 28 03:13:55 msx postfix/postfix-script[2528]: warning: not owned by group maildrop: /usr/sbin/postdrop
Jan 28 03:13:55 msx postfix/postfix-script[2530]: warning: not set-gid or not owner+group+world executable: /usr/sbin/postqueue
Jan 28 03:13:55 msx postfix/postfix-script[2531]: warning: not set-gid or not owner+group+world executable: /usr/sbin/postdrop
Jan 28 21:49:37 msx postfix/postfix-script[3430]: warning: not owned by group maildrop: /usr/sbin/postqueue
Jan 28 21:49:37 msx postfix/postfix-script[3431]: warning: not owned by group maildrop: /usr/sbin/postdrop
Jan 28 21:49:37 msx postfix/postfix-script[3434]: warning: not set-gid or not owner+group+world executable: /usr/sbin/postqueue
Jan 28 21:49:37 msx postfix/postfix-script[3435]: warning: not set-gid or not owner+group+world executable: /usr/sbin/postdrop
이것이 내 문제를 해결하는 데 도움이 될지 모르겠습니다.
추가 정보
파일에서 postfix.service
:
$ cat /etc/systemd/system/postfix.service
[Unit]
Description=Postfix Mail Transport Agent
Requires=var-run.mount nss-lookup.target network.target remote-fs.target syslog.target time-sync.target
After=var-run.mount nss-lookup.target network.target remote-fs.target syslog.target time-sync.target
After=amavis.service mysql.service cyrus.service ldap.service openslp.service ypbind.service
Before=mail-transfer-agent.target
Conflicts=sendmail.service exim.service
[Service]
Type=forking
PIDFile=/var/spool/postfix/pid/master.pid
ExecStartPre=-/bin/echo 'Starting mail service (Postfix)'
EnvironmentFile=-/etc/sysconfig/postfix
ExecStartPre=/etc/postfix/system/update_chroot
ExecStart=/usr/sbin/postfix start
ExecStartPost=/etc/postfix/system/wait_qmgr 60
ExecStartPost=/etc/postfix/system/cond_slp register
ExecReload=/usr/sbin/postfix reload
ExecReload=/usr/sbin/postfix flush
ExecStop=/usr/sbin/postfix stop
ExecStopPost=/etc/postfix/system/cond_slp deregister
[Install]
WantedBy=multi-user.target
서비스를 다시 시작한 후 시작하지 않고 모든 서비스를 나열합니다 postfix
.
$systemctl list-unit-files --type=service
...
klog.service disabled
klogd.service masked
ldconfig.service masked
loadmodules.service masked
local.service static
localfs.service static
openhpid.service enabled
postfix.service enabled
postgresql.service static
poweroff.service static
proc.service masked
...
OpenSuse 12.1 기반 운영 체제에서 실행 중이므로 journalctl
아직 도입되지 않았습니다.systemd
고쳐 쓰다
LogLevel=debug
이를 설정한 후 /etc/systemd/system.conf
이 문제와 관련된 더 많은 데이터를 얻을 수 있었습니다. /var/log/messages/
내가 이것을 찾은 후 :
Jan 31 19:17:00 msx kernel: 10.111126] systemd[1]: -.mount changed dead -> mounted
Jan 31 19:17:00 msx kernel: 10.111147] systemd[1]: Activating default unit: default.target
Jan 31 19:17:00 msx kernel: 10.111153] systemd[1]: Trying to enqueue job multi-user.target/start/replace
Jan 31 19:17:00 msx kernel: 10.111204] systemd[1]: Cannot add dependency job for unit hpiwdt.service, ignoring: Unit hpiwdt.service failed to load: No such file or directory. See system logs and 'systemctl status hpiwdt.service' for details.
Jan 31 19:17:00 msx kernel: 10.111276] systemd[1]: Found ordering cycle on lwresd.service/start
Jan 31 19:17:00 msx kernel: 10.111279] systemd[1]: Walked on cycle path to nss-lookup.target/start
Jan 31 19:17:00 msx kernel: 10.111281] systemd[1]: Walked on cycle path to lwresd.service/start
Jan 31 19:17:00 msx kernel: 10.111284] systemd[1]: Breaking ordering cycle by deleting job nss-lookup.target/start
Jan 31 19:17:00 msx kernel: 10.111286] systemd[1]: Deleting job postfix.service/start as dependency of job nss-lookup.target/start
나도 뭔지 모르겠어예또는하다 nss-lookup
.
답변1
nss-lookup.target
선택적 특수 대상 중 하나입니다 systemd
. 이는 본질적으로 시작 프로세스에서 가상 이정표 역할을 합니다. 특히, DNS 조회에 영향을 미치는 모든 시스템 서비스( lwresd
경우에 따라) .service
는 시작해야 함을 파일에 지정 해야 합니다.앞으로 nss-lookup.target
:
[Unit]
Wants=nss-lookup.target
Before=nss-lookup.target
...시작하기 위해 DNS 확인이 필요한 모든 서비스는 다음과 같이 간단히 지정할 수 있습니다.
[Unit]
After=nss-lookup.target
lwresd
패키지가 이 구성표를 정확하게 따르지 않거나 사용자 정의 배포판에 현재 권장되는 방식 대신 systemd
사용해야 할 이유가 있는 이전 버전이 있을 수 있습니다 .Requires=
Wants=
systemd가 구성에서 정렬 충돌("정렬 주기")을 감지하면 이를 매우 기계적인 방식으로 해결합니다. 이는 전체 체계에서 항상 최적이지는 않습니다. 이 경우 문제는 lwresd
과 의 정렬 인데 nss-lookup.target
, 그 과정에서 부수적 피해로 Postfix가 생략된다.
nss-lookup.target
선택 사항이기 때문에 Requires=
Postfix에 대한 종속성으로 설정하는 것은 너무 강력하고 문제를 일으킬 수 있습니다... 여러분이 겪고 있는 것과 똑같습니다.
답변2
첫째, 추가 기능은 서비스가 시작되고 실행될 때 실제로 무슨 일이 일어나고 있는지 이해하는 데 유용한 로그를 LogLevel=debug
제공합니다 . /etc/systemd/system.conf
업데이트된 질문에서 언급했듯이 nss-lookup.target
. 두 변수를 nss-lookup.target
직접 삭제 하면 부팅 프로세스 중에 시스템을 시작할 수 있습니다 ./etc/systemd/system/postfix.service
[Requires]
[After]
postfix