GNU/Linux >> Tutoriels Linux >  >> Linux

Augmenter temporairement le délai d'attente de sudo pendant la durée d'un script d'installation

Solution 1 :

Vous pouvez configurer une boucle qui s'exécute en arrière-plan pour exécuter périodiquement "sudo -v", l'astuce consiste bien sûr à faire en sorte que la boucle se termine proprement lorsque votre script se termine. Il doit donc y avoir un certain type de communication entre les deux processus ; tmp sont parfaits pour cela, et ils peuvent également être facilement nettoyés après l'exécution du script. (Un script d'installation le fait généralement, de toute façon.)

Par exemple (supprimez les instructions 'echo' pour l'utiliser ; celles-ci montrent simplement qu'il "fonctionne") :

#!/bin/bash
log=running_setup.txt
sudo_stat=sudo_status.txt

echo "========= running script $$ ========"
echo $$ >> $sudo_stat
trap 'rm -f $sudo_stat >/dev/null 2>&1' 0
trap "exit 2" 1 2 3 15

sudo_me() {
 while [ -f $sudo_stat ]; do
  echo "checking $$ ...$(date)"
  sudo -v
  sleep 5
 done &
}


echo "=setting up sudo heartbeat="
sudo -v
sudo_me

echo "=running setup=" | tee $log
while [ -f $log ]
do
 echo "running setup $$ ...$(date) ===" | tee -a $log
 sleep 2
done

# finish sudo loop
rm $sudo_stat

Ensuite, vous verrez... (note :le pid est placé dans le fichier tmp, juste pour que vous puissiez facilement le tuer. Ce n'est pas nécessaire, cependant) :

$ ./do_it.sh
========= running script 6776 ========
=setting up sudo heartbeat=
[sudo] password for user: 
=running setup=
checking 6776 ...Wed May  4 16:31:47 PDT 2011
running setup 6776 ...Wed May  4 16:31:48 PDT 2011 ===
running setup 6776 ...Wed May  4 16:31:50 PDT 2011 ===
running setup 6776 ...Wed May  4 16:31:52 PDT 2011 ===
checking 6776 ...Wed May  4 16:31:53 PDT 2011
running setup 6776 ...Wed May  4 16:31:54 PDT 2011 ===
<ctrl-c>  (cleans up files, then exits)

Solution 2 :

J'ai aimé la réponse de michael_n, mais j'avais le désir le plus irrationnel de ne pas utiliser de fichier temporaire. Peut-être que cela peut fournir une certaine perspective.

Ma solution était :

#!/bin/bash
function sudo_ping() {
    if [[ ! -z $SUDO_PID ]]; then
        if [[ $1 -eq stop ]]; then
            echo "Stopping sudo ping in PID = $SUDO_PID"
            kill $SUDO_PID
            return
        else
            echo "Already sudo pinging in PID = $SUDO_PID"
            return
        fi
    fi

    echo "Starting background sudo ping..."
    sudo -v
    if [[ $? -eq 1 ]]; then
        echo "Oops, wrong password."
        return
    fi
    sudo echo "ok"

    while true; do
        echo 'Sudo ping!'
        sudo -v
        sleep 1
    done &
    SUDO_PID=$!
    sudo echo "Sudo pinging in PID = $SUDO_PID"

    # Make sure we don't orphan our pinger
    trap "sudo_ping stop" 0
    trap "exit 2" 1 2 3 15
}

sudo_ping
sleep 5
echo "Goodbye!"

Encore une fois, le echo sont superflus...

$ ./sudoping.sh 
Starting background sudo ping...
Password:
ok  
Sudo ping!
Sudo pinging in PID = 47531
Sudo ping!
Sudo ping!
Sudo ping!
Sudo ping!
Goodbye!
Stopping sudo ping in PID = 47531

Encore une fois, ctrl-c fonctionne aussi...

$ ./sudoping.sh 
Starting background sudo ping...
ok  
Sudo ping!
Sudo pinging in PID = 47599
Sudo ping!
^CStopping sudo ping in PID = 47599

Solution 3 :

Sur la base de cet essentiel, j'ai créé une version concise et propre :

# Prevent sudo timeout
sudo -v # ask for sudo password up-front
while true; do
  # Update user's timestamp without running a command
  sudo -nv; sleep 1m
  # Exit when the parent process is not running any more. In fact this loop
  # would be killed anyway after being an orphan(when the parent process
  # exits). But this ensures that and probably exit sooner.
  kill -0 $$ 2>/dev/null || exit
done &

Linux
  1. Comment installer l'extension PHP GeoIP

  2. Bash Echo La ligne de commande exécutée sur la ligne de commande elle-même (pas dans un script) ?

  3. L'action Installer pour le produit MySQL Server 5.7.19 a échoué.

  4. Installez IMAP pour PHP 7.1 sur le système d'exploitation Ubuntu

  5. Utilisation du script Apache2Buddy pour les performances et la stabilité

Le guide complet d'utilisation de ffmpeg sous Linux

Gnome 3.2 Des problèmes dans le shell ?

Augmenter l'espace d'échange sur Ubuntu ?

Comment installer Cockpit sur Ubuntu 22.04 pour une meilleure gestion du serveur

Comment installer l'administrateur de l'interface graphique MongoDB sur AlmaLinux

Quel est le moyen le plus rapide d'exécuter un script ?