如何设置cron在将来的某个特定时间运行一次文件?

Gaj*_*jus 39 unix linux cron

如何设置cron在将来的某个特定时间运行一次文件?其中一个替代方案是http://en.wikipedia.org/wiki/At_%28Unix%29但是到目前为止标准主机方案的所有用户都无法访问它.因此我想知道是否有办法使用它cron

Tom*_*ime 53

你真的想用at.它正是为此目的而制作的.

echo /usr/bin/the_command options | at now + 1 day
Run Code Online (Sandbox Code Playgroud)

但是,如果您没有at,或者您的托管公司不提供对它的访问权限,您可以拥有一个cron作业包含的代码,以确保它只运行一次.

设置一个具有非常特定时间的cron条目:

0 0 2 12 * /home/adm/bin/the_command options
Run Code Online (Sandbox Code Playgroud)

next/home/adm/bin/the_command需要确保它只运行一次.

#! /bin/bash

COMMAND=/home/adm/bin/the_command
DONEYET="${COMMAND}.alreadyrun"

export PATH=/usr/bin:$PATH

if [[ -f $DONEYET ]]; then
  exit 1
fi
touch "$DONEYET"

# Put the command you want to run exactly once here:
echo 'You will only get this once!' | mail -s 'Greetings!' me@example.com
Run Code Online (Sandbox Code Playgroud)

  • 您不必将命令“回显”到“at”中。这只是我做的事情,因为最终我会自动化一切。 (2认同)

gpa*_*ris 33

试试这个在2011年3月30日午夜执行命令:

0 0 30 3 ? 2011  /command
Run Code Online (Sandbox Code Playgroud)

警告:如注释中所述,cron的标准/默认实现中不支持year列.请参阅下面的TomOnTime答案,了解在cron的标准实现中将来在特定时间运行脚本的正确方法.

  • 咦?什么时候"年"被添加为一列.你可以解释吗? (4认同)
  • 来自维基百科:http://en.wikipedia.org/wiki/Cron#Special_Characters ... '?' 字符用于省略日期和星期几字段的值的规范。由于为两个字段指定值是无效的,“?” 必须省略其中之一('*' 被视为特定值)。 (2认同)
  • "标准"crontab中没有年份.但是请查看这个问题:http://stackoverflow.com/questions/7724316/how-can-i-specify-time-in-cron-considering-year - 一些实现确实允许它. (2认同)

Tom*_*ime 14

你真的想用.它正是为此目的而制作的.

echo /usr/bin/the_command options | at now + 1 day
Run Code Online (Sandbox Code Playgroud)

但是,如果您没有,或者您的托管公司不提供访问权限,您可以创建一个自删除的cron条目.

遗憾的是,这将删除所有的cron条目.但是,如果你只有一个,这很好.

0 0 2 12 * crontab -r ; /home/adm/bin/the_command options
Run Code Online (Sandbox Code Playgroud)

该命令crontab -r将删除您的crontab条目.幸运的是,命令行的其余部分仍将执行.

警告:这很危险!它删除所有cron条目.如果你有很多,这将删除它们,而不仅仅是具有"crontab -r"行的那个!

  • 主持人注意:这不是 [Tom 在此处的其他答案](/sf/answers/2126492931/) 的转帖,这是使用不同技术的替代答案。 (4认同)