CRON闹钟Linux Mint突然停止

时间:2012-08-20 18:58:07

标签: linux bash cron clock alarm

我是linux的新手,我正在学习使用bash和cron编写闹钟脚本。该脚本可以从bash和双击它,但不是从cron;一旦cron调用脚本,警报就会响一次(似乎是一个循环),然后在没有显示对话框(zenity)的情况下停止。我正在使用Linux Mint 13 Maya XFCE。

这是我的crontab设置

* * * * * /home/x/Documents/MyScripts/Cron/BeepAlarm "Wake Up"

这是我的剧本

!#/bin/bash

# Initialize Variables
Text=$1
Title="Alarm"
OkLabel="Snooze"
CancelLabel='Shut It Up!'
Icon=/home/x/.icons/actions/48/appointment-new.png # Won't work
SnoozeTimeout=120
AlarmCycles=100
shopt expand_aliases
alias vol='amixer -q -c 0 sset Beep'
vol 25% # Heart friendly
rm -f LoopMode # Just in case =P

# Dialog Box Function
_MsgBox () {
    if zenity --question --title="$Title" \
    --window-icon=$Icon --ok-label="$OkLabel" \
    --cancel-label="$CancelLabel" --text="$Text"
    then
        echo 1 > LoopMode
    else
        echo 2 > LoopMode
        #kill -TERM `jobs -p` # Won't work
    fi
}

# Alarm Loop
while [ $AlarmCycles -gt 0 ]; do
    case `cat LoopMode` in
        "") # Question Box
            echo 0 > LoopMode
            _MsgBox &
            ;;

        1)  # Snooze
            vol 25%
            rm -f LoopMode
            sleep $SnoozeTimeout
            ;;

        2)  # Stop Alarm
            break # But don't sleep again
            ;;

        *)  # Get on my nerves
            beep -r 4 -l 20 -f 2000; sleep 0.5
            beep -r 4 -l 20 -f 4000; sleep 0.5
            AlarmCycles=$((AlarmCycles-1))
            vol 5%+

    esac
done

# Housekeeping~
kill $(($!+2)) # I don't know a better way to kill zenity Dialog
vol 25%   #  =)
rm -f LoopMode

1 个答案:

答案 0 :(得分:1)

正如Rob所说:

* * * * * env DISPLAY=:0.0 /home/x/Documents/MyScripts/Cron/BeepAlarm "Wake Up"
P.S:对不起,我没注意手续