防止打开的终端被关闭

防止打开的终端被关闭

已经过去很久了,所以我的命令已经生疏了。

我使用脚本来设置提醒。我运行的一个脚本会在 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+BD隐藏会话。但是,一旦隐藏,即使您关闭终端,也可以通过tmux a从 shell 运行返回到会话。您可以exit在 tmux 会话中运行,然后退出它。

这不实际上防止它被关闭。但是,即使您关闭终端窗口,它仍会继续运行,因此这对于您的用例来说可能已经足够了。

相关内容