如何在Linux上的某个时间运行脚本?

Aar*_*lal 73 linux bash scripting debian

我有一个包含特定日期和时间文本文件. 我希望能够在该文件中指定的时间运行脚本. 你会如何实现这一目标?创建另一个在后台运行的脚本(一种deamon),如果当前时间与文件中的时间匹配,则每秒检查一次?还有另外一种方法吗?这台机器是一个linux服务器,Debian wheezy.提前致谢

小智 136

请看以下内容:

echo "ls -l" | at 07:00
Run Code Online (Sandbox Code Playgroud)

此代码行在特定时间执行"ls -l".这是在特定时间执行某些操作(在我的示例中为命令)的示例."at"是你真正想要的命令.你可以在这里阅读规范:

http://manpages.ubuntu.com/manpages/precise/en/man1/at.1posix.html http://manpages.ubuntu.com/manpages/xenial/man1/at.1posix.html

希望能帮助到你!

  • 在我的情况下,这立即打印出"工作6在2017-08-21 10:53"... (5认同)
  • 得到错误```无法打开/var/run/atd.pid来发出信号.没有atd跑?```任何线索? (2认同)
  • 你需要运行 `atd` 守护进程来使用 `at`。在 Manjaro OpenRC 上,你只需安装 `at-openrc` 并添加守护进程 atd 服务:`sudo rc-update add atd` 并以 `sudo rc-service atd start` 开始。通常`at`包已经包含一个`systemd`(包括Ubuntu在内的各种发行版Linux上的默认初始化/服务系统)服务,它可以用`sudo systemctl start atd`启动,并用`sudo systemctl enable在init上启用自动启动atd`。 (2认同)

tri*_*eee 15

at命令专门用于此目的(不同于该命令cron用于调度重复任务).

at $(cat file) </path/to/script
Run Code Online (Sandbox Code Playgroud)

  • 用 bash,你会写 `$(&lt; file)` (2认同)

小智 7

Cron适合定期运行的东西,比如每周六凌晨4点.还有一个anacron,可以解决电源关闭,睡眠等问题.以及.

但是对于一次性解决方案,不需要root或任何东西,你可以使用date来计算目标时间的秒数以及当前时间,然后使用expr来查找差异,以及了好几秒钟.

  • 即使在此期间重新启动机器,"at"作业仍将保持计划. (9认同)

jul*_*mme 6

通常在Linux中,您可以使用crontab这种精简的任务.但是你必须指定"设置计时器"的时间 - 所以如果你想让它在文件本身中可配置,你必须创建一些机制来做到这一点.

但一般来说,你会用例如:

30 1 * * 5 /path/to/script/script.sh
Run Code Online (Sandbox Code Playgroud)

将在每周五凌晨1:30(上午)执行脚本:

30 是分钟

1 是小时

接下来的2*是day of monthmonth(5按此顺序)并且是工作日

  • 那你怎么会触发那个命令呢? (2认同)