Титла: Ред на стартиране/спиране на systemd services Публикувано от: senser в Apr 24, 2017, 12:58 Привет,
Преди време бях питал в друга тема подобен въпрос, но реших, че е минало доста време оттогава и по-добре да създам нова дискусия. Става дума за редът, по който се викат/изпълняват systemd услугите. Имам монтирани няколко мрежови файлови системи (cifs), които обаче са достъпни само при работещ VPN (openvpn). Целта на моя service, който се опитвам да направя, е той да се изпълнява *преди* спирането на VPN-a (настроен е през network-manager), когато системата се спира, рестартира, приспива и да размонтира отдалечените файлови системи. Ето как изглежда един вариант на service-a Код: [Unit] Description=Umount network file systems After=network-online.target openvpn-client.service Requires=network-online.target [Service] Type=oneshot EnvironmentFile=/etc/default/umounts.conf ExecStart=-/bin/umount $OPTIONS -t $FILESYSTEMS ExecStop=-/bin/umount $OPTIONS -t $FILESYSTEMS [Install] WantedBy=multi-user.target network-online.target openvpn-client.service За съжаление, когато приспивам машината (suspend) не всички отдалечени файлови системи се разкачат, а само 1, или 2. Предполагам systemd не изчаква достатъчно и затова се получава така. Проблемът не е в командата, която прави размонтирането: ExecStop=-/bin/umount $OPTIONS -t $FILESYSTEMS Когато я изпълня само нея всичко се разкача, както и се очаква. Проблемът според мен е в реда на спиране на услугите при shutdown, suspend ... etc Засега тествам само със suspend, защото е най-удобно и бързо, но и при рестартиране, или гасене положението е аналогично. Титла: Re: Ред на стартиране/спиране на systemd services Публикувано от: senser в Apr 26, 2017, 12:05 Така и не успях да се преборя със systemd и си реших проблема с два скрипта за network-manager:
Код: #cat /etc/NetworkManager/dispatcher.d/02vpnup #!/bin/sh -e IFACE=$1 ACTION=$2 if [ "$IFACE" = "tun0" ] && [ "$ACTION" = "vpn-up" ]; then logger "VPNUP: VPN IS GOING UP, MOUNTING STORAGES"; for MOUNT in storage storage2; do if ! /bin/mountpoint -q /mnt/$MOUNT; then /bin/mount /mnt/$MOUNT; else /bin/mount -o remount /mnt/$MOUNT; fi done fi exit 0; Код: #cat /etc/NetworkManager/dispatcher.d/pre-down.d/01vpndown #!/bin/sh -e IFACE=$1 ACTION=$2 #DEFAULT ROUTE INTERFACE DEFAULT_IFACE=`/bin/ip route ls |grep '^default' |cut -d " " -f 5`; if ([ "$IFACE" = "tun0" ] && [ "$ACTION" = "vpn-pre-down" ]) || ([ "$IFACE" = "$DEFAULT_IFACE" ] && [ "$ACTION" = "pre-down" ]); then logger "VPNDOWN: VPN OR DEFAULT ROUTE IFACE IS GOING DOWN, UNMOUNTING STORAGES"; for MOUNT in storage storage2; do if ! /bin/umount --force --lazy /mnt/$MOUNT >/dev/null 2>&1 1>&0; then logger "VPNDOWN: FAILED TO UMOUNT $MOUNT"; fi done fi exit 0; |