2013-09-22 42 views
50

我有一个文本文件,其中包含特定的日期和时间。 我希望能够在该文件中指定的时间运行脚本。 你会怎么做到这一点? 创建另一个在后台运行的脚本(排序的deamon),并检查每秒是否当前时间与文件中的时间匹配? 还有别的办法吗?该机器是一个linux服务器,Debian wheezy。 在此先感谢Linux如何在特定时间运行脚本?

+3

任何原因为什么cron不会工作? – lreeder

+2

为什么这个主题关闭?这是一个非常合理的问题。谷歌搜索引导你作为#1这个答案是相当nerdisch。因此,有人可以回答这个问题是明确的英语将被阻止 – Richard

+0

@Richard我怀疑StackOverflow正在关闭的原因如此多的问题是鼓励用户在适当的StackExchange网站上提出脱离主题的问题。有不少新的SE网站以前不存在。例如,在SO上有很多[非常有用的Vim问题](https://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim/1220118)关闭的话题,现在有一个Vi/Vim SE,这些问题将在那里的话题。只是在沉思。但是,这仍然看起来像是一个编程问题 – mgarey

回答

101

请看下面:

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

希望它能帮助!

+2

得到一个错误 '''无法打开/var/run/atd.pid来发信号atd。没有atd运行?'''任何线索? – HappyCoding

+0

你需要'atd'守护进程运行来使用'at'。在Manjaro OpenRC上,你可以安装'at-openrc'并添加守护进程atd服务:'sudo rc-update add atd'并以'sudo rc-service atd start'开头。通常'at'包已经包含一个'systemd'(默认init /服务系统在各种发行版linux上,包括Ubuntu)服务,它可以用'sudo systemctl start atd'启动,并且启动时使用'sudo systemctl enable启动自动启动atd'。 –

+0

在我的情况下,立即在2017-08-21 10:53打印出“作业6”... – Jewenile

4

通常在Linux中,您使用crontab来处理这种类型的计划任务。但是你必须指定“设置计时器”的时间 - 所以如果你希望它可以在文件本身中配置,你将不得不创建一些机制来实现这一点。

但在一般情况下,你会使用,例如:在1:30(AM)

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

就是执行脚本每周五 这里:

30是分钟

1被小时

接下来的2 *为day of monthmonth(在第并且5是工作日

+1

那么您将如何触发该命令? –

10

at命令专为此目的而存在(与用于调度重复性任务的cron不同)。

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

用bash,你会写'$(

5

Cron对于定期运行的东西很有用,例如每周六凌晨4点。还有anacron,它可以解决停电,睡眠和其他问题。以及

但对于一次性的解决方案,即不需要root或任何东西,你可以用日期计算秒纪元以来的目标时间,以及当前时间,然后使用expr找到差异,并且那几秒钟。

+5

即使机器在此期间重新启动,“作业”仍然保持预定。 – tripleee

相关问题