有人可以告诉我如何编写一个程序来执行此操作:5 分钟后
echo "80" > /sys/class/leds/blue/brightness
我希望这个程序在后台运行(如rngd
服务)我不能这样做,因为我对 Linux 不太了解。
答案1
( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &
这样你的脚本就会继续,或者你立即恢复控制,而新的后台任务脚本的开头有两个命令:sleep 和 echo。
常见的错误是尝试给出其中一个sleep
或echo
两个,&
但无法按预期工作。虽然启动一系列命令()
会在一个单独的 shell 进程中生成它们,然后您可以使用&
.
我发现它非常有用。在我开发的嵌入式设备中,有一个与看门狗配合使用的主要应用程序。如果它以启动后不久触发看门狗重置的方式失败,则很难远程修复,因为操作系统启动和重置之间的时间很短,不足以进行 ssh 登录并阻止应用程序启动。因此,我需要一种方法来确定系统重新启动的速度如此之快,并在重新启动时引入延迟,以便给自己时间手动修复它。
[ -f /tmp/startdelay ] && sleep 30
touch /tmp/startdelay
( sleep 30 ; rm /tmp/startdelay ) &
[ -f /tmp/noautostart ] && exit 0
start_app
如果我登录并执行touch /tmp/noautostart
主应用程序将不会启动。如果看门狗启动,rm /tmp/startdelay
则不会执行,并且下次系统启动时,它会给我额外的 30 秒来停止它。否则重启会很快,不会有延迟。
答案2
使用at
命令
echo "echo \"80\" > /sys/class/leds/blue/brightness" | at now + 5 min
将在后台运行
答案3
如果您希望某个程序在 5 分钟内运行,但程序的其余部分继续(或完成),那么您也需要将睡眠功能置于后台:
#!/bin/bash
runWithDelay () {
sleep $1;
shift;
"${@}";
}
runWithDelay 3 echo world &
echo hello
这将打印hello
,然后 3 秒后(主程序退出后),打印world
。
重要的部分是&
将函数执行分叉到后台。