आप पृष्ठभूमि में चलने वाले लूप को समय-समय पर "sudo -v" निष्पादित कर सकते हैं, निश्चित रूप से आपकी स्क्रिप्ट समाप्त होने पर लूप को साफ-साफ समाप्त करने के लिए लूप मिल रहा है। इसलिए दोनों प्रक्रियाओं के बीच कुछ प्रकार का संचार होना चाहिए; tmp फ़ाइलें इसके लिए ठीक हैं, और स्क्रिप्ट के चलने के बाद भी उन्हें आसानी से साफ किया जा सकता है। (एक इंस्टॉल स्क्रिप्ट आमतौर पर ऐसा करती है।)
उदाहरण के लिए (इसे इस्तेमाल करने के लिए 'प्रतिध्वनि' कथनों को हटा दें; ये सिर्फ "काम" करके दिखाते हैं):
#!/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
तब आप देखेंगे ... (ध्यान दें: pid को tmp फ़ाइल में डाला गया है, बस इसलिए आप इसे आसानी से मार सकते हैं। यह आवश्यक नहीं है, हालांकि:
$ ./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)