尝试在 Ubuntu 22.04 中使用 CRON 在重启时将脚本作为守护进程运行

尝试在 Ubuntu 22.04 中使用 CRON 在重启时将脚本作为守护进程运行

为了解决 22.04 LTS 中已知的错误(在不活动时不会关闭屏幕背光),我找到了以下脚本:

#!/bin/sh  
#Screen timeout script screen-lock-5-min.sh
#
  
#Wanted trigger timeout in milliseconds.  
IDLE_TIME=$((5*60*1000))  # replace the '5' with how many minutes you'd like  
  
echo "Screen lock active."  
  
#Sequence to execute when timeout triggers.  
trigger_cmd() {  
    echo "Triggered action $(date)"  
}  
  
sleep_time=$IDLE_TIME  
triggered=false  
  
while sleep $(((sleep_time+999)/1000)); do  
    idle=$(xprintidle)  
    if [ $idle -ge $IDLE_TIME ]; then  
        if ! $triggered; then  
            # gnome-screensaver-command -l  
            export DISPLAY=:0; xset dpms force off  
            triggered=true  
            sleep_time=$IDLE_TIME  
        fi  
    else  
        triggered=false  
        # Give 150 ms buffer to avoid frantic loops shortly before triggers.  
        sleep_time=$((IDLE_TIME-idle+150))  
    fi  
done  

效果很好:当我在终端中运行它时,只要我保持终端会话打开,屏幕超时就会在指定时间后正确关闭屏幕。关闭终端会停止该过程,禁用超时功能。但是,我发现我可以通过以下方式调用脚本,使其作为守护进程运行:

nohup /home/username/screen-lock-5-min.sh &  

然后我可以关闭终端,脚本将继续在后台运行。

现在到了最难的部分:我想在重启时运行此脚本。我在 crontab 文件中添加了以下行:

@reboot nohup /home/username/screen-lock-5-min.sh &  

(我之前曾尝试在不使用 nohup 的情况下在 CRON 中调用该脚本,但没有成功。)我可以看到该脚本在重新启动时正在运行,因为 nohup 将“屏幕锁定已激活”消息附加到 nohup.out 文件中。但由于某种原因,该过程在某个时候停止了:脚本不会使屏幕变黑;我仍然必须在启动时在终端中手动运行该脚本。我无论如何也想不出如何让这个脚本在后台运行。

任何帮助,将不胜感激。

相关内容