La Fibre

Télécom => Logiciels et systèmes d'exploitation => Linux Linux (usage serveur) => Discussion démarrée par: vivien le 07 avril 2019 à 11:08:23

Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 07 avril 2019 à 11:08:23
Quand je redémarre un serveur, j'ai de nombreuses minutes de blocage lié à l'erreur "Failed unmounting /home"

J'aimerais bien comprendre à quoi est du cette erreur.
Je ne vois rien dans /var/log/kern.log ou /var/log syslog, où trouver le log pour comprendre à quoi est du l’erreur ?

J'ai pensé au débit que l'erreur était lié aux deux ramdisque (tmpfs) qui étaient dans /home pour nPerf et speedtest. J'ai donc déplacé ces ramdisque tmpfs à la racine, mais /home est toujours en erreur.

(https://lafibre.info/testdebit/ubuntu/201804_failed_unmouting_home.png)
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: Thornhill le 07 avril 2019 à 11:52:59
Surement un process non arrêté.

Insère un script d'arrêt avec un lsof sur /home le plus près possible du démontage.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: kgersen le 07 avril 2019 à 12:35:01
Je ne vois rien dans /var/log/kern.log ou /var/log syslog, où trouver le log pour comprendre à quoi est du l’erreur ?

en 2019 si t'es sous systemd tout est en dans journalctl , t'as pas besoin d'utiliser d'autre commande que journatctl (meme dmesg est inclus la dedans).

Suivant la config par défaut de ta distrib, elle conserve ou pas les journaux des boots précédents:

sudo journalctl --list-boots
te permet de voir cela (suivant tes réglages de sécu le sudo peut-etre omis). Si ta distrib ne le fait pas défaut: https://www.digitalocean.com/community/tutorials/how-to-use-journalctl-to-view-and-manipulate-systemd-logs

Ensuite "sudo journalctl -b -1" par exemple permet de voir tout les logs du boot précédent (shift-g pour aller a la fin puis tu peux remonter, / pour chercher une chaine, h pour voir l'aide). 

Il y a plein d'options pour faciliter la recherche et filtrer, par exemple "sudo journalctl -b -1 -p 3" n'affiche que les erreurs ou plus grave.

man journalctl  ou des tuto en ligne.

Franchement en 2019, y'a vraiment que 2 commandes d'admin a apprendre et maîtriser sous les distrib Linux systemd: systemctl (controler et gerer les service) et journalctl.
quasi toutes les distribs majeures l'ont adopté: https://en.wikipedia.org/wiki/Systemd#Adoption

J'en vois trop encore qui continu a utiliser des vielles habitudes sur des distrib qui sont depuis longtemps passé sous systemd. Formez vous au présent ;) le gain de temps est phénoménal ensuite.




Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: BadMax le 07 avril 2019 à 13:02:51
Surement un process non arrêté.

Insère un script d'arrêt avec un lsof sur /home le plus près possible du démontage.

+1 pour lsof, contrôler la liste des processus l'utilisant avant de lancer son arrêt.

Autre solution, passer en single-user pour contrôler avec lsof qui utilise encore /home.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 07 avril 2019 à 13:17:35
Parfait.

Ubuntu garde les 32 précédents boot (-1 à -32) + l'actuel (0)

C'est bien un process qui bloque :
avril 07 12:50:05 tests systemd[1]: home.mount: Mount process exited, code=exited status=32
avril 07 12:50:05 tests systemd[1]: Failed unmounting /home.

Le process en question, c'est le serveur Ookla.

La documentation donne peu d'information pour le lancer :

Citation de: https://support.ookla.com/hc/en-us/articles/234578528-OoklaServer-Installation-Linux-Unix
Ensure server daemon starts automatically

The OoklaServer Daemon can easily be configured to start automatically. CentOS, Fedora, Debian, and most distributions derived from any of the three, all execute a script called rc.local once all system processes have started. Editing this script to include a reference to the OoklaServer Daemon will cause the daemon to start automatically at boot.

CentOS/Fedora based systems: /etc/rc.d/rc.local
Debian based systems: /etc/rc.local

If you do not want to run OoklaServer as root (recommended) create a user to run OoklaServer.
Edit rc.local to include the following command to start the OoklaServer Daemon silently in the background. Change "ooklauser" to your non-root user that will run OoklaServer.
su ooklauser -c './full_path_to_your_Ookla_Server_Daemon/OoklaServer --daemon'

/etc/rc.local n'existe même plus avec les Ubuntu récents.

Perso j'ai créé un fichier /etc/cron.d/speedtest qui le lance au démarrage et qui vérifie toutes les 5minutes si il est toujours là
# Auto restart on reboot
@reboot         speedtest   sleep 1 ; /home/speedtest/check_speedtest.sh
@reboot         speedtest   sleep 2 ; cp -r /home/speedtest/files/* /home/speedtest/tmpfs

# Auto restart SpeedTest on crash
*/5 * * * *     speedtest   sleep 20 ; /home/speedtest/check_speedtest.sh

Note: Même sans mon crontab qui se lance toutes les 5 minutes, j'ai le problème.

Le contenu du script lancé :/home/speedtest/check_speedtest.sh
#!/bin/dash
if [ `ps -C OoklaServer | wc -l` = "1" ]
then
  date >> /tmp/plantage_speedtest.log
  cd /home/speedtest/bin
  /home/speedtest/bin/OoklaServer --daemon >> /tmp/plantage_speedtest.log 2>&1
fi
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: kgersen le 07 avril 2019 à 15:02:37
encore une fois c'est systemd la solution. /etc/rc, init, cron, etc tout ca c'est dans systemd maintenant.

c'est étonnant et inconséquent de la part de speedtest de ne pas fournit une install propre pour systemd (franchement aller mentionner rc.local c'est de la fainéantise de leur part).

y'a tout ce qu'il faut dans systemd pour lancer un service 'speedtest', le relancer s'il plante , l'arreter proprement au shutdown de la machine.

créer le fichier suivant:  /etc/systemd/system/speedtest.service

avec dedans:

[Unit]
Description=service speedtest Ookla
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/full_path_to_your_Ookla_Server_Daemon/OoklaServer --daemon
Restart=always
RestartSec=15
User=monuser

[Install]
WantedBy=multi-user.target

quelques explications:

- La Type=simple indique est le programme a lancer est un executable (ligne ExecStart) qui tourne et ne s'arrete pas.
Si "OoklaServer --daemon" fork un process et rend la main il faut mettre "ExecStart=forking" et tracker le PID du process dans une option "PIDFile="

- la ligne "User=" est optionnelle et défini le compte utilisateur qui sera utilisé pour faire tourner le service. si tu veux pas que ce soit root.

- RestartSec est le delai en seconde a attendre avant de redémarrer le service

- Restart=always va redemarrer le service s'il est down

- Lors d'un shutdown , systemd va arrêter le service en envoyant un signal d'arret (personalisable). Si cela ne suffit pas a l’arrêter correctement voir https://www.freedesktop.org/software/systemd/man/systemd.kill.html

Pour installer le service:

sudo systemctl daemon-reload   // à faire toutle temps apres une ajout/modif d'un fichier systemd
sudo systemctl enable speedtest.service // ce activera le service au boot

pour démarrer a la main:
sudo systemctl start speedtest.service // le .service peut être omis si y'a pas d’ambiguïté avec autre chose

pour voir l'état :
sudo systemctl status speedtest.service

pour arreter:
sudo systemctl stop speedtest.service

pour voir le journal concernant ce service depuis le démarrage en cours:
sudo journalctl -b -u speedtest.service // penser 'u' = unit

pour désactiver le service:
sudo systemctl disable speedtest.service

pour finir je conseille fortement de lire: https://www.freedesktop.org/software/systemd/man/systemd.service.html et la doc de systemd en général.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 19 juin 2021 à 23:16:17
Je vois que j'ai oublié de faire un retour.

Le Type=simple ne fonctionne pas pour OoklaServer.

Voici ce que j'ai fait, avec Type=forking

sudo nano /etc/systemd/system/speedtest.service

[Unit]
Description=service speedtest Ookla
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
ExecStart=/home/speedtest/bin/OoklaServer --daemon
Restart=always
RestartSec=15
User=speedtest

[Install]
WantedBy=multi-user.target

sudo systemctl daemon-reload
sudo systemctl enable speedtest.service
(pour installer le service)
sudo reboot

Cela fonctionne bien, le service est bien disponible, mais je n'ai pas réglé mon problème de lenteur au reboot du serveur.

Une petite vidéo pour montrer ça simplement :

https://lafibre.info/videos/linux/202106_ookla_systemd_speedtest.service_probleme.mp4
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: kgersen le 20 juin 2021 à 16:29:43
90s est le DefaultTimeoutStopSec du system car y'a pas de TimeoutStopSec defini specifiquement pour ce service.

systemd n'arrive pas arreter proprement le service.

Soit celui-ce ne répond pas correctement a un SIGTERM, systemd attend TimeoutStopSec  (= DefaultTimeoutStopSec si pas défini) avant d'envoyer un SIGKILL
Soit le forking ne detecte peut-etre pas bien le PID du process (et y'a pas PIDFile)
 

Essai plutôt de ne pas forker:
  type=Simple et enleve le "--daemon"

si ca marche (démarre) mais c'est aussi lent a stopper c'est que le programme ne respecte pas les standards et il faut le tuer violement.
ajoute un TimeoutStopSec (dans la section [Service]) avec une valeur courte:

[Unit]
Description=service speedtest Ookla
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/home/speedtest/bin/OoklaServer
Restart=always
RestartSec=15
User=speedtest
TimeoutStopSec=10s
[Install]
WantedBy=multi-user.target


sinon reste en Type=forking mais passe un PID a systemd:

ajoute "--pidfile=/run/OoklaServer.pid" a la fin de l'ExecStart (a priori OoklaServer supporte cet option)
ainsi que: PIDFile=OoklaServer.pid


[Unit]
Description=service speedtest Ookla
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
ExecStart=/home/speedtest/bin/OoklaServer --daemon --pidfile=/run/OoklaServer.pid
PIDFile=OoklaServer.pid
Restart=always
RestartSec=15
User=speedtest
TimeoutStopSec=90s
[Install]
WantedBy=multi-user.target

s'il s'arrete pas rapidement non plus, change 90s a un 10s par exemple.
tu peux tester avec "systemctl start/stop speedtest" plutot que rebooter le serveur.

La méthode "Type=simple" est quand meme plus recommandée car plus moderne.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 20 juin 2021 à 17:28:15
Essai plutôt de ne pas forker:
  type=Simple et enleve le "--daemon"
Cela ne change rien, il n'arrive pas à terminer le programme.

ajoute un TimeoutStopSec (dans la section [Service]) avec une valeur courte:
Cela permet de réduire bien le délais.

sinon reste en Type=forking mais passe un PID a systemd:

ajoute "--pidfile=/run/OoklaServer.pid" a la fin de l'ExecStart (a priori OoklaServer supporte cet option)
ainsi que: PIDFile=OoklaServer.pid
Là OoklaServer ne fonctionne pas.

Il faut ouvrir des droit pour pouvoir écrit sur /run/OoklaServer.pid ?

$ sudo service speedtest status
● speedtest.service - service speedtest Ookla
     Loaded: loaded (/etc/systemd/system/speedtest.service; enabled; vendor preset: enabled)
     Active: activating (start) since Sun 2021-06-20 15:22:39 UTC; 1min 20s ago
    Process: 694 ExecStart=/home/speedtest/bin/OoklaServer --daemon --pidfile=/run/OoklaServer.pid (code=exited, status=0/SUCCESS)
      Tasks: 1 (limit: 9339)
     Memory: 6.3M
     CGroup: /system.slice/speedtest.service
             └─737 /home/speedtest/bin/OoklaServer --daemon --pidfile=/run/OoklaServer.pid

juin 20 15:22:39 hp systemd[1]: Starting service speedtest Ookla...
juin 20 15:22:39 hp systemd[1]: speedtest.service: Can't open PID file /run/OoklaServer.pid (yet?) after start: Operation not permitted
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: kgersen le 20 juin 2021 à 17:50:16
revient comme avant et met juste un TimeoutStopSec dans ce cas. le programme est mal écrit ou faut co,nfigurer ton compte utilisateur.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 20 juin 2021 à 18:10:41
En utilisant le PID existant le serveur se lance bien, mais met toujours du temps pour s’arrêter :

[Unit]
Description=service speedtest Ookla
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
ExecStart=/home/speedtest/bin/OoklaServer --daemon --pidfile=/home/speedtest/bin/OoklaServer.pid
PIDFile=/home/speedtest/bin/OoklaServer.pid
Restart=always
RestartSec=15
User=speedtest
TimeoutStopSec=60s

[Install]
WantedBy=multi-user.target

Il y a en effet un fichier /home/speedtest/bin/OoklaServer.pid existant :

$ ls -l /home/speedtest/bin/
total 17644
-rwxr-xr-x 1 speedtest speedtest 18044475 juin  16  2020 OoklaServer
-rw-r----- 1 speedtest speedtest        4 juin  20 16:06 OoklaServer.pid
-rw-r--r-- 1 speedtest speedtest     3897 juin  19 20:41 OoklaServer.properties
-rw-r--r-- 1 speedtest speedtest     3907 juin  16  2020 OoklaServer.properties.default
-rwxrwxr-x 1 speedtest speedtest     6708 août  15  2018 ooklaserver.sh

Je découvre aussi un /home/speedtest/bin/ooklaserver.sh qu'il ont eu la bonne idée de rajouter pour gérer le serveur.

Voici son contenu :
#!/bin/sh
# OoklaServer install and management script
BASE_DOWNLOAD_PATH='https://install.speedtest.net/ooklaserver/stable/'
INSTALL_DIR=''
DAEMON_FILE='OoklaServer'
PID_FILE="$DAEMON_FILE.pid"


display_usage() {
echo "This script can be used to install or control a Ookla Server."
echo  "Usage:"
echo  "$0 [-f|--force] [-i|--installdir <dir>] command"
echo  ""
echo  "  Valid commands: install, start, stop, restart"
echo  "   install - downloads and installs the Ookla server"
echo  "   start   - starts the server if not running"
echo  "   stop    - stops the server if running"
echo  "   restart - stops the server if running, and restarts it"
echo  " "
echo  "  -f|--force           Do not prompt before install"
echo  "  -i|--install <dir>   Install to specified folder instead of the current folder"
echo  "  -h|--help            This help"
echo  ""
}

has_command() {
type "$1" >/dev/null 2>&1
}

detect_platform() {
# detect operating system
case $( uname -s ) in
Darwin)
server_package='macosx'
;;
Linux)
server_package='linux32'
arch=`uname -m`
if [ "$arch" = "x86_64" ]; then
server_package='linux64'
fi
;;
FreeBSD)
server_package='freebsd32'
arch=`uname -m`
if [ "$arch" = "amd64" ]; then
server_package='freebsd64'
fi
;;
*)
echo "Please Select the server Platform : "
echo "1) macOS"
echo "2) Linux (32bit)"
echo "3) Linux (64bit)"
echo "4) FreeBSD (32bit)"
echo "5) FreeBSD (64bit)"

read n
case $n in
1) server_package='macosx';;
2) server_package='linux32';;
3) server_package='linux64';;
4) server_package='freebsd32';;
5) server_package='freebsd64';;
esac
esac

echo "Server Platform is $server_package"
}

confirm_install() {
if [ "$INSTALL_DIR" != "" ]; then
printf "This will install the Ookla server for $server_package to folder $INSTALL_DIR. Please confirm (y/n) > "
else
printf "This will install the Ookla server for $server_package to the current folder. Please confirm (y/n) > "
fi
    read response
    if [ "$response" != "y" ]; then
echo "Exiting program."
exit 1
   fi
}

goto_speedtest_folder() {
# determine if base install folder exists
dir_full=`pwd`
dir_base=`basename $dir_full`

echo "Checking Directory Structure"
if [ "$INSTALL_DIR" != "" ]; then
if [ "$dir_base" != "$INSTALL_DIR" ]; then
if [ ! -d "$INSTALL_DIR" ]; then
mkdir "$INSTALL_DIR"
scriptname=`basename $0`
# copy script to folder
cp "$scriptname" "$INSTALL_DIR"
fi

cd "$INSTALL_DIR"
fi
fi
}

download_install() {
# download the v3 server files with either wget or curl or fetch
gzip_download_file="OoklaServer-$server_package.tgz"
gzip_download_url="$BASE_DOWNLOAD_PATH$gzip_download_file"

curl_path=`command -v curl`
wget_path=`command -v wget`
fetch_path=`command -v fetch`

echo "Downloading Server Files"
if [ -n "$curl_path" ]; then
curl -O $gzip_download_url

elif [ -n "$wget_path" ]; then
wget "$gzip_download_url" -O "$gzip_download_file"

elif [ -n "$fetch_path" ]; then
# fetch is found in base OS in FreeBSD
fetch -o "$gzip_download_file" "$gzip_download_url"
else
echo "This script requires CURL or WGET or FETCH"
exit 1
fi

# extract package
if [ -f "$gzip_download_file" ]; then
echo "Extracting Server Files"
tar -zxovf "$gzip_download_file"
rm "$gzip_download_file"
if [ ! -f "${DAEMON_FILE}.properties" ]; then
cp "${DAEMON_FILE}.properties.default" "${DAEMON_FILE}.properties"
fi
else
echo "Error download server package"
exit 1
fi

}

restart_if_running() {
stop_if_running
start
}

stop_process() {
daemon_pid="$1"
printf "Stopping $DAEMON_FILE Daemon ($daemon_pid)"
kill "$daemon_pid" >/dev/null 2>&1
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
if kill -0 "$daemon_pid" >/dev/null 2>&1 ; then
sleep 1
printf " ."
else
break
fi
done
echo ""
}

stop_if_running() {
if [ -f "$PID_FILE" ]; then
daemon_pid=`cat $PID_FILE`
if [ $daemon_pid ]; then
stop_process "$daemon_pid"
if has_command pgrep; then
pids=$(pgrep OoklaServer 2>&1)
if [ -n "$pids" ]; then
echo "Additional $DAEMON_FILE processes running; stopping"
for daemon_pid in $pids; do
stop_process "$daemon_pid"
done
pids=$(pgrep OoklaServer 2>&1)
if [ -n "$pids" ]; then
echo "Lingering $DAEMON_FILE processes running; killing ($pids)"
kill -9 $pids
fi
fi
fi
fi
fi
}

start_if_not_running() {
if [ -f "$PID_FILE" ]; then
daemon_pid=`cat $PID_FILE`
if [ $daemon_pid ]; then
if kill -0 "$daemon_pid" > /dev/null 2>&1 ; then
echo "$DAEMON_FILE ($daemon_pid) is already running"
exit 1
fi
fi
fi
start
}

start() {
printf "Starting $DAEMON_FILE"
dir_full=`pwd`
if [ -f "$DAEMON_FILE" ]; then
chmod +x "$DAEMON_FILE"
daemon_cmd="./$DAEMON_FILE --daemon --pidfile=$dir_full/$PID_FILE"
# echo "$daemon_cmd"
`$daemon_cmd`
else
echo ""
echo "Daemon not installed. Please run install first."
exit 1
fi

# wait for PID file to be created and verify daemon started

for i in 1 2 3 4 5 6 7 8 9 10; do
sleep 1
if [ -f "$PID_FILE" ]; then break; fi
printf " ."
done
echo ""
    if [ -f "$PID_FILE" ]; then
daemon_pid=`cat $PID_FILE`
echo "Daemon Started ($daemon_pid)"
else
echo "Failed to Start Daemon"
fi
}

##### Main

prompt=1
action=help
while [ "$1" != "" ]; do
    case $1 in
install ) action=install
;;
stop ) action=stop
;;
start ) action=start
;;
restart ) action=restart
;;
help ) action=help
;;
        -i | --installdir )        shift
                                INSTALL_DIR=$1
                                ;;
        -f | --force )    prompt=0
                                ;;
        -h | --help )           display_usage
                                exit
                                ;;
        * )                     display_usage
                                exit 1
    esac
    shift
done

if [ "$action" = "restart" ]; then
restart_if_running
fi

if [ "$action" = "start" ]; then
start_if_not_running
fi

if [ "$action" = "stop" ]; then
stop_if_running
fi


if [ "$action" = "help" ]; then
display_usage
fi

if [ "$action" = "install" ]; then
detect_platform
if [ "$prompt" = "1" ]; then
confirm_install
fi

goto_speedtest_folder

download_install

restart_if_running

echo "NOTE:"
echo ""
echo "We strongly recommend following instructions at"
echo ""
echo "   https://www.ookla.com/support/a87011938/"
echo ""
echo "to ensure your daemon starts automatically when the system reboots"
echo ""
fi
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: kgersen le 21 juin 2021 à 10:15:13
L'inconvient de mettre le fichier pid a cet endroit est qu'en cas de reboot violent du serveur ce fichier n'est pas supprimé ce qui pourrait empêcher le service de démarrer.

Il faudrait tester si la présence du fichier pid avant le lancement du programme gene ou pas.

L'avantage de /run est qu'il n'est pas permanent et ne survie pas a un reboot donc le fichier pid est supprimé meme en cas de reboot violent (coupure électrique par exemple).

essai plutôt avec le dossier /run/user/xxxxx (ou xxxx est le résultat de 'id -u speedtest').
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 21 juin 2021 à 11:16:16
# id -u speedtest
1001

/run/user/1001 n'est pas crée automatiquement, il y a juste /run/user/1000 c'est à moi de le créer et de lui sonner les droits ?

Le fichier /home/speedtest/bin/OoklaServer.pid a été crée par le programme d'installation et pas mis à jour ensuite, il contient le ID du premier lancement.

Je me demande si on ne peut pas reprendre des bout de code du script qui permet de lancer / arrêter le serveur :

Start:
start() {
        printf "Starting $DAEMON_FILE"
        dir_full=`pwd`
        if [ -f "$DAEMON_FILE" ]; then
                chmod +x "$DAEMON_FILE"
                daemon_cmd="./$DAEMON_FILE --daemon --pidfile=$dir_full/$PID_FILE"
                # echo "$daemon_cmd"
                `$daemon_cmd`
        else
                echo ""
                echo "Daemon not installed. Please run install first."
                exit 1
        fi

        # wait for PID file to be created and verify daemon started

        for i in 1 2 3 4 5 6 7 8 9 10; do
                sleep 1
                if [ -f "$PID_FILE" ]; then break; fi
                printf " ."
        done
        echo ""
    if [ -f "$PID_FILE" ]; then
                daemon_pid=`cat $PID_FILE`
                echo "Daemon Started ($daemon_pid)"
        else
                echo "Failed to Start Daemon"
        fi
}

Stop :
stop_process() {
        daemon_pid="$1"
        printf "Stopping $DAEMON_FILE Daemon ($daemon_pid)"
        kill "$daemon_pid" >/dev/null 2>&1
        for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
                if kill -0 "$daemon_pid" >/dev/null 2>&1 ; then
                        sleep 1
                        printf " ."
                else
                        break
                fi
        done
        echo ""
}

stop_if_running() {
        if [ -f "$PID_FILE" ]; then
                daemon_pid=`cat $PID_FILE`
                if [ $daemon_pid ]; then
                        stop_process "$daemon_pid"
                        if has_command pgrep; then
                                pids=$(pgrep OoklaServer 2>&1)
                                if [ -n "$pids" ]; then
                                        echo "Additional $DAEMON_FILE processes running; stopping"
                                        for daemon_pid in $pids; do
                                                stop_process "$daemon_pid"
                                        done
                                        pids=$(pgrep OoklaServer 2>&1)
                                        if [ -n "$pids" ]; then
                                                echo "Lingering $DAEMON_FILE processes running; killing ($pids)"
                                                kill -9 $pids
                                        fi
                                fi
                        fi
                fi
        fi
}
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: kgersen le 21 juin 2021 à 11:28:29
Ce code fait rien de plus qu'un kill (sigterm) puis un kill -9 (sigkill) après 20 secondes. il cherche ensuite tous les process nommés 'OoklaServer' et les tue.

Ca reviendra au meme de faire la version type=Simple avec TimeoutStopSec=20s.

tu peux éventuellement ajouté "ExitType=cgroup" si le programme crée plusieurs process.

Franchement si ton serveur ne reboot pas souvent et si tuer le service violement (kill) ne pose pas de problème. La méthode type=simple reste la plus simple.

apres tu peux utiliser le script en le mettant dans ExecStop.

Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 21 juin 2021 à 21:04:19
si le programme crée plusieurs process.

Si je fais un ps -ef je ne vois que deux process :

# ps -ef | grep Ookla
speedte+  1388     1  0 juin10 ?       00:00:27 /home/speedtest/bin/OoklaServer --daemon
root      4509  4482  0 20:50 pts/0    00:00:00 grep --color=auto Ookla
speedte+ 10089  1388 25 juin11 ?       2-15:08:04 /home/speedtest/bin/OoklaServer --ward --server-id=78c4e3dc-26df-4d60-957e-c49eb1cf5e67

Si je fais htop : (le serveur a aussi nPerf qui tourne)
(https://lafibre.info/testdebit/ubuntu/202106_htop_speedtest_nperf.png)
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: kgersen le 21 juin 2021 à 21:30:50
c'est des process indépendants ou ont-ils tous le meme parent que le process qui a le pid dans le fichier ?

"ps faux" ca donne quoi ?

et compare avec le contenu de /home/speedtest/bin/OoklaServer.pid


Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 21 juin 2021 à 21:35:40
OoklaServer.pid est pas mis à jour, car je n'utilise pas leur script. Il contient un seul pid.

Comparaison Ookla / nPerf / Apache :
# ps faux | grep Ookla
speedte+  1388  0.0  0.0 203372    40 ?        Ssl  juin10   0:27 /home/speedtest/bin/OoklaServer --daemon
speedte+ 10089 25.9  1.0 4554532 343880 ?      Sl   juin11 3806:23  \_ /home/speedtest/bin/OoklaServer --ward --server-id=78c4e3dc-26df-4d60-957e-c49eb1cf5e67

# ps faux | grep nperf
nperf-s+ 19091 21.6  0.4 994332 137364 ?       Ssl  juin18 1077:29 /usr/bin/nPerfServer -x --pidfile=/var/lib/nperf-server/nPerfServer.pid -p 8081 -t 8443 --uuidfile=/var/lib/nperf-server/nPerfServer.uuid -i ::

# ps faux | grep apache
root      1804  0.0  0.0 337464 19072 ?        Ss   juin10   0:46 /usr/sbin/apache2 -k start
www-data 19260  0.0  0.0 345028 19340 ?        S    05:54   0:07  \_ /usr/sbin/apache2 -k start
www-data 19261  0.0  0.0 344996 20604 ?        S    05:54   0:09  \_ /usr/sbin/apache2 -k start
www-data 19262  0.0  0.0 344980 19524 ?        S    05:54   0:07  \_ /usr/sbin/apache2 -k start
www-data 19263  0.0  0.0 344952 20316 ?        S    05:54   0:07  \_ /usr/sbin/apache2 -k start
www-data 19264  0.0  0.0 345012 20068 ?        S    05:54   0:09  \_ /usr/sbin/apache2 -k start
www-data 19265  0.0  0.0 345024 18928 ?        S    05:54   0:08  \_ /usr/sbin/apache2 -k start
www-data 19266  0.0  0.0 345036 20044 ?        S    05:54   0:09  \_ /usr/sbin/apache2 -k start
www-data 19267  0.0  0.0 344992 18884 ?        S    05:54   0:09  \_ /usr/sbin/apache2 -k start
www-data 19268  0.0  0.0 345000 20944 ?        S    05:54   0:08  \_ /usr/sbin/apache2 -k start
www-data 19269  0.0  0.0 345008 19640 ?        S    05:54   0:08  \_ /usr/sbin/apache2 -k start
www-data 19270  0.0  0.0 345020 20028 ?        S    05:54   0:09  \_ /usr/sbin/apache2 -k start
www-data 19271  0.0  0.0 345000 19412 ?        S    05:54   0:08  \_ /usr/sbin/apache2 -k start
www-data 19272  0.0  0.0 345000 19784 ?        S    05:54   0:08  \_ /usr/sbin/apache2 -k start
www-data 19273  0.0  0.0 344864 19712 ?        S    05:54   0:09  \_ /usr/sbin/apache2 -k start
www-data 19274  0.0  0.0 345024 18868 ?        S    05:54   0:07  \_ /usr/sbin/apache2 -k start
www-data 19275  0.0  0.0 345024 19168 ?        S    05:54   0:08  \_ /usr/sbin/apache2 -k start
www-data 19276  0.0  0.0 344932 20216 ?        S    05:54   0:10  \_ /usr/sbin/apache2 -k start
www-data 19277  0.0  0.0 345004 18912 ?        S    05:54   0:10  \_ /usr/sbin/apache2 -k start
www-data 19278  0.0  0.0 344832 19616 ?        S    05:54   0:10  \_ /usr/sbin/apache2 -k start
www-data 19279  0.0  0.0 344948 19872 ?        S    05:54   0:07  \_ /usr/sbin/apache2 -k start
www-data 19280  0.0  0.0 344996 20044 ?        S    05:54   0:10  \_ /usr/sbin/apache2 -k start
www-data 19281  0.0  0.0 345020 20020 ?        S    05:54   0:09  \_ /usr/sbin/apache2 -k start
www-data 19282  0.0  0.0 345008 21052 ?        S    05:54   0:08  \_ /usr/sbin/apache2 -k start
www-data 19283  0.0  0.0 345004 20872 ?        S    05:54   0:11  \_ /usr/sbin/apache2 -k start
www-data 19284  0.0  0.0 345164 19928 ?        S    05:54   0:09  \_ /usr/sbin/apache2 -k start
www-data 19285  0.0  0.0 345016 18900 ?        S    05:54   0:08  \_ /usr/sbin/apache2 -k start
www-data 19287  0.0  0.0 345004 20016 ?        S    05:54   0:08  \_ /usr/sbin/apache2 -k start
www-data 19289  0.0  0.0 345016 20660 ?        S    05:54   0:08  \_ /usr/sbin/apache2 -k start
www-data 19291  0.0  0.0 345020 19732 ?        S    05:54   0:07  \_ /usr/sbin/apache2 -k start
www-data 19293  0.0  0.0 344896 19800 ?        S    05:54   0:08  \_ /usr/sbin/apache2 -k start
www-data 23013  0.0  0.0 345044 19712 ?        S    06:48   0:09  \_ /usr/sbin/apache2 -k start
www-data 23014  0.0  0.0 344940 19780 ?        S    06:48   0:09  \_ /usr/sbin/apache2 -k start
www-data 23015  0.0  0.0 344992 19944 ?        S    06:48   0:08  \_ /usr/sbin/apache2 -k start
www-data 25656  0.0  0.0 345008 19160 ?        S    07:36   0:09  \_ /usr/sbin/apache2 -k start
www-data 25657  0.0  0.0 345004 19748 ?        S    07:36   0:06  \_ /usr/sbin/apache2 -k start
www-data 30337  0.0  0.0 345620 20392 ?        S    09:00   0:08  \_ /usr/sbin/apache2 -k start
www-data 30944  0.0  0.0 344932 19784 ?        S    09:11   0:07  \_ /usr/sbin/apache2 -k start
www-data 31703  0.0  0.0 344868 18920 ?        S    09:28   0:06  \_ /usr/sbin/apache2 -k start
www-data 31704  0.0  0.0 344948 19148 ?        S    09:28   0:09  \_ /usr/sbin/apache2 -k start
www-data 31711  0.0  0.0 344952 19604 ?        S    09:30   0:07  \_ /usr/sbin/apache2 -k start
www-data  9704  0.0  0.0 344888 19140 ?        S    12:39   0:06  \_ /usr/sbin/apache2 -k start
www-data  9705  0.0  0.0 344888 19716 ?        S    12:39   0:07  \_ /usr/sbin/apache2 -k start
www-data  9706  0.0  0.0 344884 18788 ?        S    12:39   0:07  \_ /usr/sbin/apache2 -k start
www-data 17893  0.0  0.0 344796 19532 ?        S    15:07   0:04  \_ /usr/sbin/apache2 -k start
www-data 17894  0.0  0.0 344860 18772 ?        S    15:07   0:03  \_ /usr/sbin/apache2 -k start
www-data 17895  0.0  0.0 344808 19472 ?        S    15:07   0:04  \_ /usr/sbin/apache2 -k start
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: kgersen le 21 juin 2021 à 21:42:10
donc y'a bien une hiérarchie de processes.
pstree -ap 1388 
devrait l'afficher.

si tu fais "kill -0 1388" cela arrete t'il bien tout les process ?

dans ce cas il manque juste "ExitType=cgroup" dans le fichier .service:

[Unit]
Description=service speedtest Ookla
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/home/speedtest/bin/OoklaServer
ExitType=cgroup
Restart=always
RestartSec=15
User=speedtest
TimeoutStopSec=90s
[Install]
WantedBy=multi-user.target

si l'arret du service met encore 90s dans cas y'a que la solution de mettre TimeoutStopSec a 10s.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 21 juin 2021 à 21:55:52
kill -0 1388 ne kill rien du tout, c'est inefficace pour ce process.

J'ai tenté plusieurs fois, mais il est toujours là avec ses petits.

donc y'a bien une hiérarchie de processes.
pstree -ap 1388 
devrait l'afficher.
# pstree -ap 1388 
OoklaServer,1388 --daemon
  ├─OoklaServer,10089 --ward --server-id=78c4e3dc-26df-4d60-957e-c49eb1cf5e67
  │   ├─{OoklaServer},10090
  │   ├─{OoklaServer},10091
  │   ├─{OoklaServer},10092
  │   ├─{OoklaServer},10093
  │   ├─{OoklaServer},10094
  │   ├─{OoklaServer},10095
  │   ├─{OoklaServer},10096
  │   ├─{OoklaServer},10097
  │   ├─{OoklaServer},10098
  │   ├─{OoklaServer},10099
  │   ├─{OoklaServer},10100
  │   ├─{OoklaServer},10101
  │   ├─{OoklaServer},10102
  │   ├─{OoklaServer},10103
  │   ├─{OoklaServer},10104
  │   ├─{OoklaServer},10105
  │   ├─{OoklaServer},10106
  │   ├─{OoklaServer},10107
  │   ├─{OoklaServer},10108
  │   ├─{OoklaServer},10109
  │   ├─{OoklaServer},10110
  │   ├─{OoklaServer},10111
  │   ├─{OoklaServer},10112
  │   ├─{OoklaServer},10113
  │   ├─{OoklaServer},10114
  │   ├─{OoklaServer},10115
  │   ├─{OoklaServer},10116
  │   ├─{OoklaServer},10117
  │   ├─{OoklaServer},10118
  │   ├─{OoklaServer},10119
  │   ├─{OoklaServer},10120
  │   ├─{OoklaServer},10121
  │   ├─{OoklaServer},10122
  │   ├─{OoklaServer},10123
  │   ├─{OoklaServer},10124
  │   ├─{OoklaServer},10125
  │   ├─{OoklaServer},10126
  │   ├─{OoklaServer},10127
  │   ├─{OoklaServer},10128
  │   ├─{OoklaServer},10129
  │   ├─{OoklaServer},10130
  │   ├─{OoklaServer},10131
  │   ├─{OoklaServer},10132
  │   ├─{OoklaServer},5653
  │   ├─{OoklaServer},14178
  │   ├─{OoklaServer},2652
  │   ├─{OoklaServer},4214
  │   ├─{OoklaServer},4217
  │   ├─{OoklaServer},4233
  │   ├─{OoklaServer},5934
  │   ├─{OoklaServer},5942
  │   ├─{OoklaServer},7093
  │   ├─{OoklaServer},7094
  │   ├─{OoklaServer},7615
  │   ├─{OoklaServer},7642
  │   ├─{OoklaServer},8517
  │   ├─{OoklaServer},8520
  │   ├─{OoklaServer},8525
  │   ├─{OoklaServer},9285
  │   ├─{OoklaServer},9293
  │   ├─{OoklaServer},9300
  │   ├─{OoklaServer},9312
  │   ├─{OoklaServer},11875
  │   ├─{OoklaServer},17661
  │   ├─{OoklaServer},17668
  │   ├─{OoklaServer},17674
  │   ├─{OoklaServer},17675
  │   ├─{OoklaServer},17684
  │   ├─{OoklaServer},17700
  │   ├─{OoklaServer},17702
  │   ├─{OoklaServer},17705
  │   ├─{OoklaServer},17706
  │   ├─{OoklaServer},17708
  │   ├─{OoklaServer},17713
  │   ├─{OoklaServer},17714
  │   ├─{OoklaServer},17723
  │   ├─{OoklaServer},17810
  │   ├─{OoklaServer},17813
  │   ├─{OoklaServer},17829
  │   ├─{OoklaServer},17831
  │   ├─{OoklaServer},17881
  │   ├─{OoklaServer},17884
  │   ├─{OoklaServer},17885
  │   ├─{OoklaServer},17889
  │   ├─{OoklaServer},17890
  │   ├─{OoklaServer},17900
  │   ├─{OoklaServer},17903
  │   ├─{OoklaServer},18006
  │   ├─{OoklaServer},18023
  │   ├─{OoklaServer},18029
  │   ├─{OoklaServer},18038
  │   ├─{OoklaServer},18049
  │   ├─{OoklaServer},18063
  │   ├─{OoklaServer},18075
  │   ├─{OoklaServer},19585
  │   ├─{OoklaServer},19589
  │   ├─{OoklaServer},19591
  │   ├─{OoklaServer},19593
  │   ├─{OoklaServer},19594
  │   ├─{OoklaServer},19595
  │   ├─{OoklaServer},19596
  │   ├─{OoklaServer},19599
  │   ├─{OoklaServer},19600
  │   ├─{OoklaServer},19607
  │   ├─{OoklaServer},19609
  │   ├─{OoklaServer},19610
  │   ├─{OoklaServer},19611
  │   ├─{OoklaServer},19612
  │   ├─{OoklaServer},19613
  │   ├─{OoklaServer},19616
  │   ├─{OoklaServer},19617
  │   ├─{OoklaServer},19622
  │   ├─{OoklaServer},19628
  │   ├─{OoklaServer},19629
  │   ├─{OoklaServer},19631
  │   ├─{OoklaServer},19632
  │   ├─{OoklaServer},19636
  │   ├─{OoklaServer},19637
  │   ├─{OoklaServer},19640
  │   ├─{OoklaServer},19641
  │   ├─{OoklaServer},20246
  │   ├─{OoklaServer},20247
  │   ├─{OoklaServer},20249
  │   ├─{OoklaServer},20250
  │   ├─{OoklaServer},20252
  │   ├─{OoklaServer},20254
  │   ├─{OoklaServer},20256
  │   ├─{OoklaServer},22025
  │   ├─{OoklaServer},22026
  │   ├─{OoklaServer},22029
  │   ├─{OoklaServer},22030
  │   ├─{OoklaServer},22031
  │   ├─{OoklaServer},22033
  │   ├─{OoklaServer},22035
  │   ├─{OoklaServer},22036
  │   ├─{OoklaServer},22038
  │   ├─{OoklaServer},22040
  │   ├─{OoklaServer},22041
  │   ├─{OoklaServer},22045
  │   ├─{OoklaServer},22046
  │   ├─{OoklaServer},22047
  │   ├─{OoklaServer},22048
  │   ├─{OoklaServer},22049
  │   ├─{OoklaServer},22050
  │   ├─{OoklaServer},22055
  │   ├─{OoklaServer},22061
  │   ├─{OoklaServer},23526
  │   ├─{OoklaServer},23527
  │   ├─{OoklaServer},23528
  │   ├─{OoklaServer},23530
  │   ├─{OoklaServer},23531
  │   ├─{OoklaServer},23533
  │   ├─{OoklaServer},23534
  │   ├─{OoklaServer},23535
  │   ├─{OoklaServer},23536
  │   ├─{OoklaServer},23537
  │   ├─{OoklaServer},23538
  │   ├─{OoklaServer},23539
  │   ├─{OoklaServer},23541
  │   ├─{OoklaServer},30013
  │   ├─{OoklaServer},30015
  │   ├─{OoklaServer},30017
  │   ├─{OoklaServer},30018
  │   ├─{OoklaServer},30019
  │   ├─{OoklaServer},30020
  │   ├─{OoklaServer},30021
  │   ├─{OoklaServer},30023
  │   ├─{OoklaServer},30024
  │   ├─{OoklaServer},30025
  │   ├─{OoklaServer},30026
  │   ├─{OoklaServer},30027
  │   ├─{OoklaServer},30028
  │   ├─{OoklaServer},30029
  │   ├─{OoklaServer},30030
  │   ├─{OoklaServer},30031
  │   ├─{OoklaServer},30032
  │   ├─{OoklaServer},30033
  │   ├─{OoklaServer},30034
  │   ├─{OoklaServer},30039
  │   ├─{OoklaServer},30040
  │   ├─{OoklaServer},30042
  │   ├─{OoklaServer},30043
  │   ├─{OoklaServer},30044
  │   ├─{OoklaServer},30046
  │   ├─{OoklaServer},30094
  │   ├─{OoklaServer},30095
  │   ├─{OoklaServer},30097
  │   ├─{OoklaServer},30141
  │   ├─{OoklaServer},30147
  │   ├─{OoklaServer},30148
  │   ├─{OoklaServer},30149
  │   ├─{OoklaServer},30150
  │   ├─{OoklaServer},30152
  │   ├─{OoklaServer},30153
  │   ├─{OoklaServer},30193
  │   ├─{OoklaServer},30197
  │   ├─{OoklaServer},30199
  │   ├─{OoklaServer},30200
  │   ├─{OoklaServer},30201
  │   ├─{OoklaServer},30202
  │   ├─{OoklaServer},30203
  │   ├─{OoklaServer},30204
  │   ├─{OoklaServer},30205
  │   ├─{OoklaServer},30206
  │   ├─{OoklaServer},30208
  │   ├─{OoklaServer},30209
  │   ├─{OoklaServer},30210
  │   ├─{OoklaServer},30211
  │   ├─{OoklaServer},30212
  │   ├─{OoklaServer},30217
  │   ├─{OoklaServer},30218
  │   ├─{OoklaServer},30219
  │   ├─{OoklaServer},30220
  │   ├─{OoklaServer},30221
  │   ├─{OoklaServer},30222
  │   ├─{OoklaServer},30226
  │   ├─{OoklaServer},30227
  │   ├─{OoklaServer},30228
  │   ├─{OoklaServer},30229
  │   ├─{OoklaServer},30230
  │   ├─{OoklaServer},30231
  │   ├─{OoklaServer},30232
  │   ├─{OoklaServer},30256
  │   ├─{OoklaServer},30257
  │   ├─{OoklaServer},30258
  │   ├─{OoklaServer},30259
  │   ├─{OoklaServer},30260
  │   ├─{OoklaServer},30262
  │   ├─{OoklaServer},17333
  │   ├─{OoklaServer},17334
  │   ├─{OoklaServer},17335
  │   ├─{OoklaServer},17336
  │   ├─{OoklaServer},17339
  │   ├─{OoklaServer},17340
  │   ├─{OoklaServer},17343
  │   ├─{OoklaServer},17344
  │   ├─{OoklaServer},17345
  │   ├─{OoklaServer},17346
  │   ├─{OoklaServer},17347
  │   ├─{OoklaServer},17348
  │   ├─{OoklaServer},17349
  │   ├─{OoklaServer},17351
  │   ├─{OoklaServer},17353
  │   ├─{OoklaServer},17355
  │   ├─{OoklaServer},17356
  │   ├─{OoklaServer},17357
  │   ├─{OoklaServer},17358
  │   ├─{OoklaServer},17359
  │   ├─{OoklaServer},17360
  │   ├─{OoklaServer},17361
  │   ├─{OoklaServer},30724
  │   ├─{OoklaServer},30725
  │   ├─{OoklaServer},5035
  │   ├─{OoklaServer},5036
  │   ├─{OoklaServer},5037
  │   ├─{OoklaServer},5038
  │   ├─{OoklaServer},5039
  │   ├─{OoklaServer},5040
  │   ├─{OoklaServer},5041
  │   ├─{OoklaServer},5042
  │   ├─{OoklaServer},5043
  │   ├─{OoklaServer},5044
  │   ├─{OoklaServer},5045
  │   ├─{OoklaServer},5046
  │   ├─{OoklaServer},5047
  │   ├─{OoklaServer},5048
  │   ├─{OoklaServer},5049
  │   ├─{OoklaServer},5050
  │   ├─{OoklaServer},5051
  │   ├─{OoklaServer},5052
  │   ├─{OoklaServer},5053
  │   └─{OoklaServer},5054
  ├─{OoklaServer},1392
  └─{OoklaServer},10088
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: PhilippeMarques le 22 juin 2021 à 02:00:58
man signal

Signal     Valeur    Action   Commentaire
       ─────────────────────────────────────────────────────────────────────────
       SIGHUP        1       Term    Déconnexion détectée sur le terminal
                                     de contrôle ou mort du processus de
                                     contrôle.
       SIGINT        2       Term    Interruption depuis le clavier.
       SIGQUIT       3       Core    Demande « Quitter » depuis le clavier.
       SIGILL        4       Core    Instruction illégale.
       SIGABRT       6       Core    Signal d'arrêt depuis abort(3).
       SIGFPE        8       Core    Erreur mathématique virgule flottante.
       SIGKILL       9       Term    Signal « KILL ».
       SIGSEGV      11       Core    Référence mémoire invalide.
       SIGPIPE      13       Term    Écriture dans un tube sans
                                     lecteur.
       SIGALRM      14       Term    Temporisation alarm(2) écoulée.
       SIGTERM      15       Term    Signal de fin.
       SIGUSR1   30,10,16    Term    Signal utilisateur 1.
       SIGUSR2   31,12,17    Term    Signal utilisateur 2.

       SIGCHLD   20,17,18    Ign     Fils arrêté ou terminé.
       SIGCONT   19,18,25    Cont    Continuer si arrêté.
       SIGSTOP   17,19,23    Stop    Arrêt du processus.
       SIGTSTP   18,20,24    Stop    Stop invoqué depuis le terminal.
       SIGTTIN   21,21,26    Stop    Lecture sur le terminal en arrière-plan.
       SIGTTOU   22,22,27    Stop    Écriture dans le terminal en arrière-plan.



C'est quoi kill -0 ?
A moins que cela ai changé, si tu tues le ppid le fork pid reviens à init, si tu tues le père à la main, il faut tuer tous les fils.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: kgersen le 22 juin 2021 à 06:45:38
C'est quoi kill -0 ?

ca permet de tester l'existence d'un process. c'est utiliser dans le script fourni après le kill pour attendre l'arret des process. (voir man kill).

kill -0 1388 ne kill rien du tout, c'est inefficace pour ce process.

J'ai tenté plusieurs fois, mais il est toujours là avec ses petits.

mais effectivement je me suis trompé c'est "kill 1388" qu'il fallait faire , sans le -0.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 22 juin 2021 à 10:12:50
Même en rajoutant ExitType=cgroup, on est obligé d'attendre l’expiration du timeout.

J'utilise la configuration proposée ci-dessous :

il manque juste "ExitType=cgroup" dans le fichier .service:

[Unit]
Description=service speedtest Ookla
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/home/speedtest/bin/OoklaServer
ExitType=cgroup
Restart=always
RestartSec=15
User=speedtest
TimeoutStopSec=90s
[Install]
WantedBy=multi-user.target

La raison de ce blocage est que la fin du process père ne tue pas le fils.

Ce matin le père est le process 693 :

# pstree -ap 693
OoklaServer,693
  ├─OoklaServer,755 --ward --server-id=3ddadcab-9c30-4ab4-9057-9c1080b27817
  │   ├─{OoklaServer},756
  │   ├─{OoklaServer},757
  │   ├─{OoklaServer},758
  │   ├─{OoklaServer},759
  │   ├─{OoklaServer},760
  │   ├─{OoklaServer},761
  │   ├─{OoklaServer},762
  │   ├─{OoklaServer},763
  │   ├─{OoklaServer},764
  │   ├─{OoklaServer},765
  │   ├─{OoklaServer},766
  │   ├─{OoklaServer},767
  │   ├─{OoklaServer},768
  │   ├─{OoklaServer},769
  │   ├─{OoklaServer},770
  │   ├─{OoklaServer},771
  │   ├─{OoklaServer},772
  │   ├─{OoklaServer},773
  │   ├─{OoklaServer},774
  │   ├─{OoklaServer},775
  │   ├─{OoklaServer},776
  │   ├─{OoklaServer},777
  │   ├─{OoklaServer},778
  │   ├─{OoklaServer},779
  │   ├─{OoklaServer},780
  │   ├─{OoklaServer},781
  │   ├─{OoklaServer},782
  │   ├─{OoklaServer},784
  │   ├─{OoklaServer},785
  │   ├─{OoklaServer},786
  │   ├─{OoklaServer},787
  │   ├─{OoklaServer},788
  │   ├─{OoklaServer},789
  │   ├─{OoklaServer},790
  │   ├─{OoklaServer},791
  │   ├─{OoklaServer},792
  │   ├─{OoklaServer},793
  │   ├─{OoklaServer},794
  │   ├─{OoklaServer},795
  │   ├─{OoklaServer},796
  │   ├─{OoklaServer},797
  │   └─{OoklaServer},1043
  ├─{OoklaServer},719
  ├─{OoklaServer},720
  ├─{OoklaServer},722
  ├─{OoklaServer},723
  ├─{OoklaServer},724
  └─{OoklaServer},754

Je tu le process père :
# kill 693

System.d a bien relancé le serveur sur PID 1061 qui a crée un fil 1062, mais le fils du 693, le PID 755 est toujours là :
# ps faux | grep Ookla
root        1073  0.0  0.0   8996   672 pts/0    S+   08:07   0:00                      \_ grep --color=auto Ookla
speedte+     755  0.2  0.1 2136416 13100 ?       Sl   08:04   0:00 /home/speedtest/bin/OoklaServer --ward --server-id=3ddadcab-9c30-4ab4-9057-9c1080b27817
speedte+    1061  5.0  0.0      0     0 ?        Z    08:07   0:00  \_ [OoklaServer] <defunct>
speedte+    1062  4.0  0.0  55484  6712 ?        Sl   08:07   0:00  \_ /home/speedtest/bin/OoklaServer --server-id=3ddadcab-9c30-4ab4-9057-9c1080b27817

Ce qui bloque le redémarrage, c'est donc le PID fils et non le père qui est bien tué.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: PhilippeMarques le 22 juin 2021 à 12:55:21
Ce qui bloque le redémarrage, c'est donc le PID fils et non le père qui est bien tué.
Si tu tues le ppid, les pid reviennent à init et c'est init ( pid 1) qui devient leur ppid
Essaye un killall sur le pid, de mémoire cela tue tous les fils aussi.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 22 juin 2021 à 13:01:37
Si je fais un killall sur le nom, un seul est tué :

$ ps faux | grep Ookla
speedte+     692  0.0  0.0 194752  6680 ?        Ssl  10:56   0:00 /home/speedtest/bin/OoklaServer
speedte+     751  2.3  0.1 2382192 12456 ?       Sl   10:56   0:00  \_ /home/speedtest/bin/OoklaServer --ward --server-id=fc1b18ee-723f-459c-b4f2-63868f6910ea

$ sudo killall OoklaServer
Cela a tué le père :
$ ps faux | grep Ookla
speedte+     751  1.2  0.1 2144508 12992 ?       Sl   10:56   0:00 /home/speedtest/bin/OoklaServer --ward --server-id=fc1b18ee-723f-459c-b4f2-63868f6910ea

Étonnant, le fils a crée un fils :
$ ps faux | grep Ookla
speedte+     751  1.0  0.1 2136312 13064 ?       Sl   10:56   0:00 /home/speedtest/bin/OoklaServer --ward --server-id=fc1b18ee-723f-459c-b4f2-63868f6910ea
speedte+    1058  0.5  0.0  55484  6848 ?        Sl   10:57   0:00  \_ /home/speedtest/bin/OoklaServer --server-id=fc1b18ee-723f-459c-b4f2-63868f6910ea


J'ai essayé de lancer plusieurs fois de suite sudo killall OoklaServer, mais il est plus rapide que moi a créer des fils.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: PhilippeMarques le 22 juin 2021 à 13:43:20
Et si tu commençais par le mettre ailleurs que dans /home ? Je sais pas sur /usr/local/sbin par exemple pour faire propre ? ( cela règle pas le problème ) mais ça pique les yeux de le voir là.
Pour killall il y a des options :)
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 22 juin 2021 à 13:56:40
Je dois avouer mettre tout ce que j'installe sur home : Cela a aussi un aspect pratique : quand je me connecte sur un serveur, faire un ls sur /home permet de voir tout ce qu'il héberge.

Je crée un utilisateur pour chaque binaire et je mets l’exécutable dans le dossier bin de l'utilisateur, vu que c'est uniquement lui qui le lance et y accède.
/usr/local/sbin, c'est pour des utilitaires qui demandent les droits root, cela ne semble pas trop adapté.
Un dossier /usr/local/bin/speedtest/ propriétaire de l'utilisateur speedtest avec un dossier /home/speedtest qui existe mais qui est vide te semble plus pertinent ?

Et pour des sites web (donc pas de binaire, juste du contenu pour Apache) tu le mettrais où ? perso je mets aussi mes sites web dans /home par exemple /home/lafibre.info
L'avantage est également de dissocier l'espace disque : mes serveurs on un / d'une taille de 25 à 30 Go et le reste de l'espace disque est pour /home
En mettant le contenu des sites sur /home je suis sur de ne pas saturer la partition racine en cas de problème.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: PhilippeMarques le 22 juin 2021 à 14:26:35
Je crée un utilisateur pour chaque binaire et je mets l’exécutable dans le dossier bin de l'utilisateur, vu que c'est uniquement lui qui le lance et y accède.
/usr/local/sbin, c'est pour des utilitaires qui demandent les droits root, cela ne semble pas trop adapté.
Un dossier /usr/local/bin/speedtest/ propriétaire de l'utilisateur speedtest avec un dossier /home/speedtest qui existe mais qui est vide te semble plus pertinent ?
Tout dépends de comment tu crées "speedtest" c'est un id, dans /etc/passwd ou /etc/shadow et un gid dans /etc/group, il n' a pas nécessairement besoin d'avoir un répertoire dans /home
oui /usr/local/bin/speedtest/ me semble plus pertinent

Et pour des sites web (donc pas de binaire, juste du contenu pour Apache) tu le mettrais où ? perso je mets aussi mes sites web dans /home par exemple /home/lafibre.info
Il se trouve que tu es mono-utilisateur, mais l'esprit n'est pas celui-là, UNIX est multiutilisateur, et chaque utilisateur a son espace propre pour y héberger ses propres données, un site web par utilisateur, dans son propre espace /home, là cela me choque pas.

L'avantage est également de dissocier l'espace disque : mes serveurs on un / d'une taille de 25 à 30 Go et le reste de l'espace disque est pour /home
En mettant le contenu des sites sur /home je suis sur de ne pas saturer la partition racine en cas de problème.
Ce qui pose problème quand tu fais un update/upgrade système dans des partitions trop petites, l'espace utilisateur, est l'espace utlisateur, l'espace système est l'espace système ( c'est une lapalissade, mais elle dissocie bien les deux), là c'est un amalgame utilisateur/système.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 22 juin 2021 à 15:00:49
il faut quand même un /home pour l'utilisateur que je crée (surtout que je lance bash avec cet utilisateur pour faire l'installation)

Voici les commandes que je passe pour créer l'utilisateur et installer le serveur speedtest :

adduser speedtest --disabled-login --gecos speedtest
su - speedtest -s /bin/bash
mkdir /home/speedtest/bin
cd /home/speedtest/bin/
wget http://install.speedtest.net/ooklaserver/ooklaserver.sh
chmod a+x ooklaserver.sh
./ooklaserver.sh install
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: PhilippeMarques le 22 juin 2021 à 16:27:10
Ce qui veux dire que le Daemon est lancé avec un sticky bit ?
(edit)
Là ou je veux en venir c'est est-ce que c'est dans le même group pour tuer le processus pour ensuite démonter ?
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 22 juin 2021 à 17:05:15
Le lancement (et l’arrêt) est fait par systemd, c'est justement l'objet de ce sujet :

[Unit]
Description=service speedtest Ookla
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/home/speedtest/bin/OoklaServer
ExitType=cgroup
Restart=always
RestartSec=15
User=speedtest
TimeoutStopSec=90s

[Install]
WantedBy=multi-user.target


Il a besoin des droits en écriture, car il le binaire se met à jour automatiquement (ne me demande pas comment cela se passe, je ne sais pas, mais les mises à jour fonctionnent bien), l'ancien binaire est renommé "OoklaServer.previous" comme tu peut le voir dans le ls ci-dessous : La dernière mise à jour date du 10 juillet 2020 et celle d'avant du 18 septembre 2019 :

$ ls -l /home/speedtest/bin/
total 35212
-rwxr-x--- 1 speedtest speedtest 18044475 juil. 10  2020 OoklaServer
-rw-r----- 1 speedtest speedtest        6 mars  23  2020 OoklaServer.pid
-rwxr-xr-x 1 speedtest speedtest 17986320 sept. 18  2019 OoklaServer.previous
-rw-r--r-- 1 speedtest speedtest     2276 mars  23  2020 OoklaServer.properties
-rw-r--r-- 1 speedtest speedtest     3907 juil. 10  2020 OoklaServer.properties.default
-rwxrwxr-x 1 speedtest speedtest     6708 août  15  2018 ooklaserver.sh
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: PhilippeMarques le 22 juin 2021 à 18:06:23
Tu as plusieurs options.

Soit c'est grave pour le fonctionnement et tu n'es certainement pas le seul, tu te rapproches des équipes de dev pour ouvrir un bug.
Soit c'est pas si grave et tu as déjà la solution de descendre le timeout à 0 ( vu la vidéo après le timeout les unmount passent).
Ou poursuivre dans la compréhension de pourquoi le processus est bloqué, cela peut prendre pas mal de temps, c'est chronophage pour un résultat dépendant de ton objectif.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: kgersen le 22 juin 2021 à 18:26:18
leur script a un timeout de 20s et pas de 90s donc met 20s et t'embete pas plus.

Apres pour reproduire l'équivalent du script ooklaserver.sh, (notamment stop_process & stop_if_running()) il faut ajouter:
(a ajouter dans la section [Service]: )
KillMode = mixed
TimeoutStopSec = 20s

En plus ton restart est a 15s donc le mettre plutôt a 30s par exemple.

ou si tu veux tu carrément utiliser leur script:

(ajouter dans la section [Service]):
ExecStop=/home/speedtest/bin/ooklaserver.sh stopet supprimer le TimeoutStopSec.

C'est le plus 'sur' car s'il mette a jour le code du script ooklaserver.sh,  ca sera a jour aussi.

Dans ce cas autant faire aussi leur "start" aussi. Mais leur "start" est de type forking donc faut tout changer et reprendre de zéro:

[Unit]
Description=service speedtest Ookla
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
WorkingDirectory=/home/speedtest/bin/
ExecStart=/home/speedtest/bin/ooklaserver.sh start
ExecStop=/home/speedtest/bin/ooklaserver.sh stop
PIDFile=/home/speedtest/bin/OoklaServer.pid
Restart=always
RestartSec=30
User=speedtest

[Install]
WantedBy=multi-user.target


Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 22 juin 2021 à 21:59:53
Je vais remonter le problème à Ookla, avec le script qu'ils proposent, c'est aussi très long :

https://lafibre.info/videos/linux/202106_ookla_systemd_speedtest.service_script.mp4

Par contre kgersen, KillMode=mixed fait des miracles, le serveur se coupe instantanément, je ne vois même pas passer la ligne tellement c'est rapide :
Avec KillMode=mixed, le signal SIGTERM est envoyé au processus principal tandis que le signal SIGKILL est envoyé à tous les processus restants du groupe de contrôle de l'unité.

J'ai par contre mis ExitType=main (la valeur par défaut) car il me semble incohérent de mettre KillMode=mixed avec ExitType=cgroup.
Le fait que KillMode=mixed fonctionne bien montre bien le rôle du processus principal et qu'ils ne sont pas tous au même niveau.

Voici le /etc/systemd/system/speedtest.service qui fonctionne parfaitement :

[Unit]
Description=service speedtest Ookla
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/home/speedtest/bin/OoklaServer
ExitType=main
Restart=always
RestartSec=30
User=speedtest
KillMode=mixed
TimeoutStopSec=25s

[Install]
WantedBy=multi-user.target

J'ai baissé le timeout TimeoutStopSec=25s à 25 secondes, vu la vitesse a laquelle cela se passe en temps normal, si on dépasse quelques secondes, cela ne va pas se terminer et autant réduire les 90 secondes à 25 secondes.

Merci pour votre aide !
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 14 novembre 2021 à 22:15:14
Je vois dans mes logs que j'ai :
/etc/systemd/system/speedtest.service:9: Unknown key name 'ExitType' in section 'Service', ignoring.

ExitType=main n'est pas placé au bon endroit dans mon fichier ?
(c'est le fichier du message précédent que j'utilise)

-- Logs begin at Mon 2021-10-04 14:26:51 CEST, end at Sun 2021-11-14 22:10:07 CET. --
nov. 10 06:23:20 appliwave systemd[1]: Started service speedtest Ookla.
nov. 10 06:23:20 appliwave OoklaServer[1187]: Loaded config file: /home/speedtest/bin/OoklaServer.properties
nov. 10 06:23:20 appliwave OoklaServer[2136]: Loaded config file: /home/speedtest/bin/OoklaServer.properties
nov. 10 06:23:27 appliwave systemd[1]: /etc/systemd/system/speedtest.service:9: Unknown key name 'ExitType' in section 'Service', ignoring.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: kgersen le 14 novembre 2021 à 22:28:00
il sort d'ou ton ExitType ?!

la doc est bon moyen de savoir ce qui existe ou pas : https://www.freedesktop.org/software/systemd/man/systemd.service.html
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 14 novembre 2021 à 22:44:49
On en parlais par exemple là :
tu peux éventuellement ajouté "ExitType=cgroup" si le programme crée plusieurs process.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: kgersen le 15 novembre 2021 à 08:38:38
effectivement ! apres vérification c'est un ajout "récent" pas dispo partout encore ( https://github.com/systemd/systemd/pull/18782 )
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 15 novembre 2021 à 10:07:34
Je vois que le serveur Ookla ne va pas chercher les mises à jour des certificats Let's Encrypt, donc si le système reste plusieurs mois sans être redémarré, le certificat est invalide, car il utiise une copie en mémoire vive de l'ancien certificat.

Rajouter un redémarrage du serveur toutes les semaines (604800 secondes) me semble une solution pour contourner ce problème, non ?

Il suffit que je rajouter ça dans la section [servicve] ?

RuntimeMaxSec=604800
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: kgersen le 15 novembre 2021 à 10:53:20
Je vois que le serveur Ookla ne va pas chercher les mises à jour des certificats Let's Encrypt, donc si le système reste plusieurs mois sans être redémarré, le certificat est invalide, car il utiise une copie en mémoire vive de l'ancien certificat.

Rajouter un redémarrage du serveur toutes les semaines (604800 secondes) me semble une solution pour contourner ce problème, non ?

Il suffit que je rajouter ça dans la section [servicve] ?

RuntimeMaxSec=604800

oui ca devrait le faire.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: kgersen le 15 novembre 2021 à 11:04:57
pour ExitType, c'était prévu avec la version 249 de systemd.

pour voir ta version:
systemctl --version
mais a priori ca n'a pas passé la Q&A et ca été retiré a la 249-rc3

la 249 final, sortie en juillet 2021 n'a donc pas cette fonctionnalité.

on peut donc oublier ce truc pour le moment.
Titre: Comprendre d'où vient l'erreur "Failed unmounting /home"
Posté par: vivien le 15 novembre 2021 à 11:33:41
Merci !

Quand je lit ça, c'est que j'avais à l'époque trouvé de la documentation :
J'ai par contre mis ExitType=main (la valeur par défaut) car il me semble incohérent de mettre KillMode=mixed avec ExitType=cgroup.