如何在Linux上定时运行脚本?

102

我有一个包含特定日期和时间的文本文件。 我想要在该文件指定的时间运行脚本。 如何实现? 创建另一个在后台运行(类似守护进程)并每秒检查当前时间是否与文件中的时间匹配的脚本? 还有其他方法吗? 该机器是一个Linux服务器,Debian wheezy。 先感谢您。


6
为什么计划任务(cron)不工作? - lreeder
25
为什么这个话题被关闭了?这是一个非常合理的问题。谷歌搜索将其列为第一位,而答案相当专业。因此,能够用清晰的英语回答这个问题的人将被阻止。 - Richard de Ree
4
我猜测StackOverflow关闭这么多类似的问题是为了鼓励用户将不适合在这里提问的问题放到相应的StackExchange网站上。现在有很多之前不存在的SE网站。例如,SO有很多非常有用的Vim问题已经被关闭,因为它们被认为是不相关的,现在有了一个Vi/Vim SE,这些问题将在那里被认为是相关的。只是想发表一下看法。但是,这仍然似乎是一个编程问题。 - mgarey
2
说实话,我每次学完如何使用cron之后都会忘记,而且我不需要任何高级的东西。 - sudo
同意。非常有用的话题。 有人知道“at”的替代方法吗?我想在RHEL服务器上使用它,但我不想创建cron作业。 仅供将来参考,因为我现在需要它,所以我想我只能使用老式的“sleep”了。 “At”很方便,因为您不必自己进行计算(这在过去导致了错误计算)。 - oneindelijk
1
@oneindelijk 你可以使用systemd-run来替代at命令。可以参考Unix Stack Exchange上的这篇帖子 - undefined
4个回答

175

2
获取一个错误:无法打开/var/run/atd.pid以向atd发送信号。没有运行atd吗?有什么线索吗? - HappyCoding
3
要使用 at,需要启动 atd 守护进程。在 Manjaro OpenRC 上,可以安装 at-openrc 包,并通过以下命令添加守护进程服务:sudo rc-update add atd,然后使用 sudo rc-service atd start 启动服务。通常情况下,at 软件包已经包含了一个 systemd 服务(Ubuntu 等各种发行版 Linux 的默认 init/service 系统),可以使用以下命令启动服务 sudo systemctl start atd 并启用初始化时的自动启动 sudo systemctl enable atd - Manoel Vilela
11
在我的情况下,这会立即打印出“2017-08-21 10:53的第6个工作”。 - Jewenile
请注意,这可能需要首先安装。在运行 Raspbian 的 Raspberry Pi 上需要它,只需执行 sudo apt install at 即可。 - Cedric
1
对我来说,这并没有什么帮助。它只是声称将执行相应的命令 - 但实际上从来没有这样做,无论我使用什么命令(例如调用另一个程序),它都声称会执行,但实际上什么也没有发生。此外,遵循Manoel的建议(其实听起来非常基础,应该包含在解决方案中)也没有帮助。我的Ubuntu(21.04)声称"at-openrc"不存在,因此无法安装。难道不能改进这个响应以获得一个实际运行/工作的示例吗? - Prof.Chaos
显示剩余5条评论

22

at 命令专门用于此目的(与定期安排任务的 cron 不同)。

at $(cat file) </path/to/script

2
使用bash,您可以编写$(<file) - glenn jackman

12

Cron适用于周期性运行的任务,例如每周六早上4点。还有anacron,可以处理电源关闭、休眠等情况。此外还有at命令。

但是对于一次性的解决方案,不需要root权限或其他任何权限,您可以使用date计算目标时间和当前时间之间的自1970年1月1日以来的秒数差,然后使用expr查找差异并sleep相应的秒数。


10
即使机器在此期间重新启动,at 任务仍将保持调度状态。 - tripleee

8
通常在Linux中,您会使用crontab来执行此类定时任务。但是,您必须指定“设置计时器”的时间 - 因此,如果您希望它在文件本身中可配置,您将需要创建某种机制来实现这一点。
但通常情况下,您可以使用以下命令:
30 1 * * 5 /path/to/script/script.sh

每周五凌晨1:30执行脚本

30代表分钟数

1代表小时数

接下来的两个星号分别是 日期月份 (顺序为日期在前),而5则表示星期五。


2
那么你要如何触发该命令? - Aaron Ullal
1
Crontab Guru (https://crontab.guru) 是一款有用的 crontab 配置工具。 - Umesh .A Bhat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接