Systemd: 네트워크가 계속 실행되는 동안 종료하기 전에 명령을 실행합니다.

Systemd: 네트워크가 계속 실행되는 동안 종료하기 전에 명령을 실행합니다.

컴퓨터가 종료되기 전에 Systemd에서 이메일을 보내는 스크립트를 실행하도록 하려고 합니다. Systemd는 서비스가 시작된 역순으로 서비스를 종료하므로 를 입력하면 After=network.target서비스가 이전에 종료된다는 것을 이해합니다 network.target.

그러나 After=and 라인 Wants=에 아무리 많은 종속성을 넣어도 이메일 스크립트가 실행되기 전에 네트워크 연결이 끊어집니다. 이메일을 보내는 경우도 있지만 대부분의 경우에는 그렇지 않습니다. 이는 경쟁 조건이 있음을 알려주며 Systemd는 네트워크 서비스를 종료하기 전에 내 스크립트가 완료될 때까지 기다리지 않습니다.

내 유닛 파일은 다음과 같습니다.

[Unit]
Description=Send email before shutdown
Wants=network.target nss-lookup.target network-online.target networking.service NetworkManager.service network-manager.service
After=network.target nss-lookup.target network-online.target networking.service NetworkManager.service network-manager.service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/user1/send_email.sh

[Install]
WantedBy=multi-user.target

그 잡지는 이렇게 말했습니다.

Jun 20 13:13:14 caesar systemd[1]: Stopped Availability of block devices.
Jun 20 13:13:14 caesar NetworkManager[699]: <info>  [1559301194.4305] device (wlx24050fd83726): state change: deactivating -> discon
Jun 20 13:13:14 caesar NetworkManager[699]: <info>  [1559301194.4629] dhcp4 (wlx24050fd83726): canceled DHCP transaction, DHCP clien
Jun 20 13:13:14 caesar NetworkManager[699]: <info>  [1559301194.4629] dhcp4 (wlx24050fd83726): state changed bound -> done
Jun 20 13:13:14 caesar NetworkManager[699]: <info>  [1559301194.4648] manager: NetworkManager state is now DISCONNECTED
Jun 20 13:13:14 caesar NetworkManager[699]: <warn>  [1559301194.4661] sup-iface[0xb4fd40,wlx24050fd83726]: connection disconnected (
Jun 20 13:13:14 caesar NetworkManager[699]: <info>  [1559301194.4662] device (wlx24050fd83726): supplicant interface state: complete
Jun 20 13:13:14 caesar send_email.sh[21782]: s-nail:  Certificate depth 2
Jun 20 13:13:14 caesar send_email.sh[21782]: s-nail:   subject = /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert 

....

Jun 20 13:13:56 caesar send_email.sh[21782]: s-nail: could not initiate SSL/TLS connection: error:00000000:lib(0):func

이렇게 어려울 필요는 없을 것 같아요. 누구든지 내가 뭘 잘못하고 있는지 지적해 주시면 감사하겠습니다.

답변1

"Requires=network.target" 줄도 지정해야 합니다. 더 많은 정보를 원하시면 방문해주세요https://fedoramagazine.org/systemd-unit-dependent-and-order/

관련 정보