У меня есть сценарий ниже, который, кажется, отлично работает при запуске из командной строки с /root/.scripts/peter-laptop-backup-launcher.sh daily
(он отображает xmessage, спрашивающий, что я хочу сделать), но когда он запускается через anacron он ведет себя по-разному, говоря, что xmessage был отображен, и пользователь нажал на «x» в углу, хотя на самом деле он вообще не отображался.
При запуске из командной строки выводит сообщение и корректно действует по выбору пользователя.
Сценарий:
#!/bin/sh
# Script to launch the appropriate Backup command to backup My laptop, on condition that the drive is mounted.
type=$1
action="102"
ip="192.168.0.5"
# Set the display
DISPLAY=peter-aspire-ubuntu:0
export DISPLAY
cp /home/peter/.Xauthority /root/.Xauthority
while [ $action -ne 101 ]
do
echo "Begin loop"
echo "Perform ping"
ping -c 1 $ip
if [ $? -eq 0 ] ; then
echo "Machine is giving ping response"
mount /mnt/NAS > /dev/null 2>&1;
else
echo "Machine is not responding to pings"
fi
if grep -qs '/mnt/NAS' /proc/mounts; then
# It's mounted so carry on.
echo "NAS is mounted"
if [ "$type" = "daily" ]; then
echo "Performing daily backup"
nice -n 17 rsnapshot daily
echo "Daily backup finished"
##
## FINISHED - SWITCH OFF
##
umount -l /mnt/NAS
echo "NAS unmounted"
ssh root@nas 'poweroff -pih';
echo "NAS powered down"
else
echo "Performing $type backup"
rsnapshot $type
echo "$type backup finished"
fi
action="101"
else
# It's not mounted so...
# 101 = "Cancel"
# 102 = "Try again"
# 1 = User clicked the 'X'
# 0 = Timeout occured
echo "Displaying xmessage"
xmessage -buttons "Cancel","Try again","Snooze 30min","Snooze 1hr" -default "Try again" -center -timeout 1200 "The NAS is not mounted and your $type backup is due to run."
action=$?
echo "xmessage signal was = $action"
if [ $action -eq 0 ] ; then
echo "User clicked 'Try again'"
action="102"
fi
if [ $action -eq 1 ] ; then
echo "User clicked 'x'"
action="101"
fi
if [ $action -eq 103 ] ; then
echo "Snooze for 30m"
sleep 30m
# Set "Try again"
action="102"
fi
if [ $action -eq 104 ] ; then
echo "Snooze for 1hr"
sleep 1hr
action="102"
fi
echo "final adjusted = $action"
fi
echo "End of loop"
done
Это запись в /etc /anacrontab
1 4 rsnapshot.daily /root/.scripts/peter-laptop-backup-launcher.sh daily > /var/log/backup/rsnapshot.daily.log
Это то, что зарегистрировано в /rsnapshot.daily.log
Begin loop
Perform ping
PING 192.168.0.5 (192.168.0.5) 56(84) bytes of data.
From 192.168.0.8 icmp_seq=1 Destination Host Unreachable
--- 192.168.0.5 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
Machine is not responding to pings
Displaying xmessage
xmessage signal was = 1
User clicked 'x'
final adjusted = 101
End of loop
Это вывод в терминале при запуске из командной строки:
Begin loop
Perform ping
PING 192.168.0.5 (192.168.0.5) 56(84) bytes of data.
From 192.168.0.8 icmp_seq=1 Destination Host Unreachable
--- 192.168.0.5 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
Machine is not responding to pings
Displaying xmessage
{after this the result depends on what you choose and behaves as expected}
Цель сценария - запускать резервную копию моего rsnapshot каждый день, но если мой NAS, на котором я храню резервные копии, не включен и не смонтирован, он спрашивает меня, что я хочу сделать, давая мне возможность включить его до продолжается. Если меня нет рядом, чтобы ответить на сообщение, оно будет повторяться позже.