我想以root身份运行一个Bash脚本,但是需要延迟执行。我该如何实现?
sudo "sleep 3600; command" , or
sudo (sleep 3600; command)
无法工作。
sudo "sleep 3600; command" , or
sudo (sleep 3600; command)
无法工作。
你可以使用 at 命令:
sudo at next hour
然后你需要输入命令并使用Ctrl+D关闭文件。另外,你也可以在文件中指定要运行的命令:
sudo at -f commands next hour
最简单的答案是:
sudo bash -c 'sleep 3600; command' &
因为sleep
是一个shell命令而不是可执行文件,分号也是一个shell“运算符”,所以它是一个shell脚本,因此需要在shell中运行。bash -c
告诉sudo
运行bash
并将其作为字符串传递要执行的脚本。
当然,这会一直“挂起”,直到command
实际完成运行,或者如果退出周围的shell,则被杀死。我还没有找到一种简单的方法来在这里使用nohup
来防止这种情况发生,此时,您基本上正在重新实现at
命令。但是我发现上述解决方案在许多简单情况下非常有用。;)
对于任何更复杂的情况...当然,您始终可以创建一个真正的shell脚本文件,在开头加上shebang(#! ...
),然后运行它。但我认为整个重点是您想避免为此编写如此简单的内容。
理论上,您可以使用Bash的... <(...)
语法将字符串作为文件传递,但sudo
希望它是一个真正的文件,并且标记为可执行文件,因此这不起作用。
sudo bash -c 'sleep 3600; command'
。 - thebodzio
cron
,因为它用于服务器上定期计划的事件。如果您想执行一次性操作,则at
是一个更好的选择。 - Jordan Reiter