已经过去很久了,所以我的命令已经生疏了。
我使用脚本来设置提醒。我运行的一个脚本会在 3 小时后显示“午夜后会出现流星雨。”
有什么方法可以防止我意外关闭正在运行计时器脚本的终端?
更新:
这是我的脚本。
#!/bin/bash
#
# Sound alarm after specifying time and message
# Must input time delay AND message in double quotes !!
#
#
# ** sleep can also accept intergers ex. sleep 7.63
# Made alias for it type al
# Print a trace of simple commands, for commands, case commands, select commands,
# and arithmetic for commands and their # arguments or associated word lists after they are expanded
# and before they are executed. The value of the PS4 variable is # expanded and the resultant value is printed before the # command and its expanded arguments.
Red='\e[0;31m'
BRed='\e[1;31m'
BIRed='\e[1;91m' # ${BIRed} this works
Gre='\e[0;32m'
BGre='\e[1;32m'
BBlu='\e[1;34m' # ${BBlu}
BWhi='\e[1;37m'
Black='\e[0;30'
BWhite='\e[0m 1;37'
# This defines a variable containing the ANSI escape sequence to clear
# the effect of all previous ANSI escape sequences that define formatting (colors, underlining, etc).
RCol='\e[0m';
soundfile="/usr/share/sounds/My_Sounds/Alarm_Clock_Sound.mp3"
clear
amixer -D pulse sset Master 40% > /dev/null 2>&1
if [ -f "$soundfile" ];
then
echo -e "${BGre}Soundfile is present."
else
echo "File $soundfile does NOT exist."
echo
echo "Program will now exit."
exit
fi
[ -z "$2" ] && {
echo
echo -e " ${BIRed}Error!! No time value given and/or message specified !!"
echo
echo -e " ${BBlu}Alarm Program 2018 ${RCol}"
echo
echo -e " alarm.sh [time value in seconds] Message in double Quotes";
echo -e " alarm 5m = 5 minute alarm"
echo -e " alarm 5h = 5 hour alarm"
echo -e " alarm 5d = 5 day alarm"
echo -e " alarm 1.5m = 1 minute 30 seconds alarm"
echo
echo -e " alarm.sh 1m "\"Take bread out of oven."\""
echo
exit 1; }
echo -e "\033[32;5mTIMER COUNTING DOWN to $1 \033[0m"
sleep $1
{
for ((volume = 15; volume <= 35; volume += 2)); do
# 2> /dev/null suppresses messages for amixer AND (c)vlc
amixer -D pulse sset Master ${volume}% > /dev/null
sleep .5
done
} &
mpg123 $soundfile > /dev/null 2>&1
#set back to original volume
amixer -D pulse sset Master %30
gxmessage -fg blue -font 'sans 20' -timeout 2 ' Tea is ready. !!'
答案1
您可以使用以下方式将脚本作为守护进程运行daemon
命令,在后台运行脚本:
daemon --name="yourservicename" --output=./yourlog.txt ./yourscript
要停止守护程序:
daemon --name="yourservicename" --stop
要安装守护进程:
sudo apt update
sudo apt install daemon
您唯一需要做的其他事情就是修改脚本以通过以下方式发送消息notify-send
(如您的问题中所述):
notify-send -u critical -t 0 "Meteor shower occurs after midnight."
当您使用-u critical -t 0
选项时,通知将保留在屏幕上,直到您单击它。
或者,您可以使用 nohup
:
nohup ./yourscript &
您仍然需要修改脚本才能按照notify-send
上述方式发送消息。
答案2
根据您显示文本的方式,这可能对您有用,也可能没用。但更一般地讲,这是保持某些东西正常运行的有效方法。
您可以使用tmux。您需要使用 来安装它sudo apt update && sudo apt install tmux
。
安装后,您可以通过在 shell 中运行来启动 tmux 会话tmux
。进入会话后,您可以运行命令,然后执行Ctrl+B以D隐藏会话。但是,一旦隐藏,即使您关闭终端,也可以通过tmux a
从 shell 运行返回到会话。您可以exit
在 tmux 会话中运行,然后退出它。
这不实际上防止它被关闭。但是,即使您关闭终端窗口,它仍会继续运行,因此这对于您的用例来说可能已经足够了。