【问题标题】:How to run a script at a certain time on Linux? [closed]如何在 Linux 上的某个时间运行脚本? [关闭]
【发布时间】:2013-09-27 13:08:40
【问题描述】:

我有一个包含特定日期和时间的文本文件。 我希望能够在该文件中指定的时间运行脚本。 你将如何做到这一点? 创建另一个在后台运行的脚本(类似于守护进程)并每秒检查当前时间是否与文件中的时间匹配? 还有其他方法吗? 该机器是一个 linux 服务器,Debian wheezy。 提前致谢

【问题讨论】:

  • cron 不能工作的任何原因?
  • 为什么这个话题被关闭了?这是一个非常合理的问题。谷歌搜索把你引向这个 #1 答案很书呆子。所以能回答这个问题的人很清楚英语会被屏蔽
  • @Richard 我怀疑 StackOverflow 关闭这么多此类问题的原因是为了鼓励用户在适当的 StackExchange 站点上提出与主题无关的问题。有很多以前不存在的新 SE 站点。例如,SO 上有很多 very useful Vim questions 已作为离题关闭,现在有了 Vi/Vim SE,这些问题将成为主题。只是在沉思。但是,这似乎仍然是一个编程问题
  • Tbh 每次学完cron都忘记怎么用了,也不需要什么高级的东西了。

标签: linux bash scripting debian


【解决方案1】:

看下面:

echo "ls -l" | at 07:00

此代码行在特定时间执行“ls -l”。这是在特定时间执行某事(在我的示例中为命令)的示例。 “at”是您真正需要的命令。您可以在此处阅读规格:

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

希望对你有帮助!

【讨论】:

  • 收到错误Can't open /var/run/atd.pid to signal atd. No atd running? 有什么线索吗?
  • 您需要运行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 atd 启用自动启动。
  • 在我的情况下,这会立即打印出“job 6 at 2017-08-21 10:53”...
  • 顺便说一句,我的 bash 文档描述了 at -c 的用法。如果执行命令的方式是将其通过管道传输到 std in,它有什么用?
  • 对我来说这没有帮助。 At 只是声称将执行相应的命令 - 但实际上它从未这样做,无论我使用什么命令(例如调用另一个程序),它只是声称这样做,但什么也没发生。同样遵循 Manoel 的建议(这实际上听起来很初级,以至于它属于解决方案本身)也无济于事。我的 ubuntu (21.04) 声称“at-openrc”不存在,因此无法安装。不能改进此响应以获得实际的运行/工作示例吗?
【解决方案2】:

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

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

【讨论】:

  • 用 bash,你会写 $(&lt; file)
【解决方案3】:

Cron 适用于定期运行的任务,例如每周六凌晨 4 点。还有anacron,它可以解决电源关闭、睡眠等问题。以及

但对于不需要 root 或任何东西的一次性解决方案,您可以使用 date 来计算目标时间的 seconds-since-epoch 以及当前时间,然后使用 expr 找出差异,然后 sleep 那么多秒。

【讨论】:

  • 即使在此期间重新启动计算机,at 作业仍将保持计划。
【解决方案4】:

通常在 Linux 中,您使用 crontab 来执行此类调度任务。但是您必须指定“设置计时器”的时间 - 因此,如果您希望它可以在文件本身中进行配置,则必须创建一些机制来做到这一点。

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

30 1 * * 5 /path/to/script/script.sh

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

30 是分钟

1 是小时

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

【讨论】:

  • 那么你将如何触发该命令?
  • Crontab Guru (crontab.guru) 是一个有用的 crontab 配置工具。
猜你喜欢
  • 2022-01-19
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 2022-08-06
相关资源
最近更新 更多