如何设置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)
gpa*_*ris 33
试试这个在2011年3月30日午夜执行命令:
0 0 30 3 ? 2011 /command
Run Code Online (Sandbox Code Playgroud)
警告:如注释中所述,cron的标准/默认实现中不支持year列.请参阅下面的TomOnTime答案,了解在cron的标准实现中将来在特定时间运行脚本的正确方法.
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"行的那个!