如何在特定时间在Linux上运行脚本?[关闭]


80

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


4
cron无法正常工作的任何原因?
lreeder 2013年

12
为什么关闭此主题?这是一个非常合理的问题。Google搜索将您带到了第一名,而答案却相当麻烦。因此,可以回答此问题的人显然会阻止英语
Richard de Ree

2
@Richard我怀疑StackOverflow关闭如此之多的问题的原因是为了鼓励用户在适当的StackExchange网站上放置不在主题范围内的问题。有很多以前不存在的新SE网站。例如,有很多关于SO的非常有用的Vim问题已作为主题关闭,而现在有了Vi / Vim SE,这些问题就在那里。只是在沉思。但是,这似乎仍然是一个编程问题
mgarey

2
我忘了每次学习cron后都会使用它,而且我不需要任何高级知识。
sudo

Answers:


147

请看以下内容:

echo "ls -l" | at 07:00

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

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

希望能帮助到你!


2
得到Can't open /var/run/atd.pid to signal atd. No atd running?任何线索的错误 ?
HappyCoding

2
您需要atd运行守护程序才能使用at。在Manjaro OpenRC上,您可以使用以下命令安装at-openrc并添加守护程序atd服务,sudo rc-update add atd然后从开始sudo rc-service atd start。通常,该at软件包已经包含了systemd(可以在包括Ubuntu在内的各种发行版Linux上使用的默认init / service系统)服务,该服务可以通过启动sudo systemctl start atd并通过init启用自动启动sudo systemctl enable atd
Manoel Vilela

8
就我而言,这立即打印出“职位6在2017-08-21 10:53” ...
Jewenile

顺便说一句,我的bash文档描述了一种at -c用法。如果执行命令的方法是将其通过管道输入到std中,它的作用是什么?
汤姆·罗素

如果此时系统已关闭电源,此脚本将在以后运行吗?
shrijit

18

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

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

1
用bash,你会写$(< file)
glenn jackman

9

Cron可以定期运行,例如每个星期六的凌晨4点。还有一个anacron,它可以解决电源关闭,睡眠等问题。以及

但是对于不需要根或任何东西的一次性解决方案,您可以只使用日期来计算目标时间和当前时间的秒-自-纪元,然后使用expr来找出差值,并且那么多秒。


10
一个at即使机器在此期间重新启动作业将保持原有状态。
2015年

7

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

但通常,您将使用例如:

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

将在每个星期五的1:30(AM)执行以下脚本:

30 是分钟

1 是小时

接下来的2个*是day of monthand month5按此顺序),是工作日


2
那么您将如何触发该命令?
亚伦乌拉尔

1
Crontab Guru(crontab.guru)是用于crontab配置的有用工具。
Umesh.A Bhat,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.