у меня есть скрипт, который, кажется, работает отлично, при запуске из командной строки с /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=
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.ежедневный.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, который я использую для хранения резервных копий, не включен и не смонтирован, он спрашивает меня, что я хочу сделать, давая мне возможность включить его раньше продолжающийся. Если меня нет рядом, чтобы ответить на сообщение, повторите попытку позже.