有人可以告诉我如何制作程序来执行此操作:5 分钟后
echo "80" > /sys/class/leds/blue/brightness
Run Code Online (Sandbox Code Playgroud)
我希望这个程序在后台运行(比如rngd服务)我不能这样做,因为我对 Linux 不太了解。
SF.*_*SF. 77
( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &
Run Code Online (Sandbox Code Playgroud)
这样,您的脚本将继续运行,或者您立即恢复控制权,同时脚本的新后台任务开始时使用两个命令: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
Run Code Online (Sandbox Code Playgroud)
如果我登录并执行touch /tmp/noautostart主应用程序将无法启动。如果看门狗启动,rm /tmp/startdelay则不会执行,下次系统启动时,它会给我额外的 30 秒来停止它。否则重启会很快,没有延迟。
exu*_*sum 15
使用at命令
echo "echo \"80\" > /sys/class/leds/blue/brightness" | at now + 5 min
Run Code Online (Sandbox Code Playgroud)
将在后台运行
如果你想在 5 分钟内运行一些东西,但你的程序的其余部分继续(或完成),你还需要将睡眠作为后台:
#!/bin/bash
runWithDelay () {
sleep $1;
shift;
"${@}";
}
runWithDelay 3 echo world &
echo hello
Run Code Online (Sandbox Code Playgroud)
这将打印hello,然后 3 秒后(主程序退出后),打印world。
重要的部分是将&函数执行分叉到后台。