Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: senser в Apr 24, 2017, 12:58



Титла: Ред на стартиране/спиране на 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;