systemd를 사용하여 부팅 순서를 조정하는 방법

systemd를 사용하여 부팅 순서를 조정하는 방법

Wi-Fi가 IP 주소(dhcpcd 기반)를 수신하면 postfix를 서버로 사용하여 이메일을 보내야 합니다. systemd기본적으로 postfix는 wifi(wlan0)가 준비되기 전에 시작되는 것 같습니다 . 이와 관련된 결과는 postfix가 백그라운드에서 실행될 수 없고 이메일이 성공적으로 전송될 수 없다는 것입니다. 그러나 다음 스크립트를 실행하면(예:abc.sh) 시작되면 이메일은 확실히 다음을 통과하게 됩니다.

sleep 60
systemctl restart postfix
echo 'email content' | mail -s 'titile' [email protected] 

관련 서비스 파일abc.sh다음과 같이:

[Unit]
Description=pptp_setup
Requires=network-online.target
After=network-online.target

[Service]
Type=forking
ExecStart=/home/pi/script/abc.sh

[Install]
WantedBy=multi-user.target 

알아채다수면 60그리고systemctl postfix 다시 시작이메일이 제대로 전달되었는지 확인하는 방법입니다. 만약에수면 60postfix를 다시 시작하지 않고 적용하면 postfix가 처음에 올바르게 시작되지 않았기 때문에 여전히 이메일 전송에 실패합니다(위에서 언급한 것처럼 IP를 받기 전에 로드될 수 있습니다). 게다가 60초 동안 휴면 상태가 아닌 Postfix만 다시 시작하면 Postfix 다시 시작은 여전히 ​​실패합니다. 필요=networkonline.target그리고 이후=networkonline.target서비스 파일에 적용되었습니다.

내 질문은 IP 주소를 받은 후 Wi-Fi가 시작되도록 postfix를 올바르게 설정하는 방법입니다.

답변1

systemd이것은 많은 사람들이 여러 번 논의한 것처럼 영원한 질문입니다.장소. 가장 좋은 기회는 "느린 네트워크"를 통해 활성화하는 것입니다 IP_FREEBIND. 접미사에 대해서만 수정할 수는 없으며 대신 다음을 사용하여 시스템 전체에서 수정합니다.

echo "1" > /proc/sys/net/ipv4/ip_nonlocal_bind

루트 계정에서. 매뉴얼 페이지에 잘 설명되어 있습니다.ip(7).

답변2

Ubuntu 16.10을 새 MiniPC에 배포했을 때도 동일한 문제가 발생했습니다(정상적으로 실행되는 Ubuntu 14.x와는 대조적).

마침내 자동화된 솔루션을 찾았습니다. NetworkManager-wait-online.service를 활성화하고 시스템 시작 후 +-5분 후에 postfix 서비스를 다시 시작하는 사용자 정의 스크립트를 배포합니다(이 시점에서 무선 연결이 활성화되어 있다고 가정).

A. 이 기능을 활성화합니다. 이는 Postfix 이외의 다른 서비스에 유용할 수 있는 일반적인 접근 방식이므로 스크립트에 보관하겠습니다. systemctl enable NetworkManager-wait-online.service; systemctl status NetworkManager-wait-online.service;

B. 고객 시스템 타이머 + 서비스 @info 추가 타이머는 컴퓨터 시작 후 {x}분에 한 번 시작됩니다. nano /etc/systemd/system/mjd-restart-postfix-after-wlan-connected.timer [Unit] Description=(timer)mjd-restart-postfix-after-wlan-connected [Timer] OnBootSec=5min [Install] WantedBy=timers.target nano /etc/systemd/system/mjd-restart-postfix-after-wlan-connected.service [Unit] Description=mjd-restart-postfix-after-wlan-connected [Service] Type=oneshot ExecStart=/bin/sh -ec "systemctl restart postfix; systemctl status postfix; uname -a | /usr/bin/mailx -s \"Server (`hostname`): postfix was restarted.\" [email protected]"

MYUNIT=mjd-restart-postfix-after-wlan-connected MYTIMER=${MYUNIT}.timer systemctl enable ${MYTIMER}; systemctl status ${MYTIMER}; systemctl list-units --all | grep "${MYUNIT}" systemctl status ${MYUNIT}

C. 다시 시작 reboot #5분 기다림

라. 확인 MYUNIT=mjd-restart-postfix-after-wlan-connected MYTIMER=${MYUNIT}.timer systemctl status ${MYTIMER}

이러한 두 구성 파일(Resolve 하나와 Postfix 하나)의 내용이 동일하지 않으면 문제가 있는 것입니다(Postfix가 LAN/WLAN 연결 전에 시작됨). 고양이/etc/resolv.conf 고양이/var/spool/postfix/etc/resolv.conf

E.정보@dochttps://bugs.launchpad.net/ubuntu/+source/postfix/+bug/1519331 @문서https://wiki.archlinux.org/index.php/Systemd/Timers @doc qshape 지연 @doc cat /var/log/syslog | egrep "네트워크 관리자 | 접미사"

관련 정보