运行 特定时间的 cronjob

Run a cronjob at a specific time

我想 运行 在特定时间(仅一次!)特定脚本。如果我 运行 它通常是这样的:

marc@Marc-Linux:~/tennis_betting_strategy1/wrappers$ Rscript write_csv2.R

确实有效。但是,我想在 10:50 的 运行 的 cronjob 中将其编程,因此执行了以下操作:

50 10 11 05 * Rscript ~/csv_file/write_csv.R

但这似乎不起作用。有什么想法我哪里出错了吗?这些是 cron 包 im 的详细信息 使用:

PID COMMAND
1015 cron

我的系统时间也查出来了:

marc@Marc-Linux:~/tennis_betting_strategy1/wrappers$ date
wo mei 11 10:56:46 CEST 2016

有一个特殊工具只用于 运行 命令一次 - at.

使用 at 您可以安排这样的命令:

at 09:05 am today
at> enter you commands...

请注意,您需要 atd 守护程序 运行。

不过,您的 crontab 条目看起来还不错。我建议检查 cron 守护进程是否为 运行(确切的守护进程名称取决于 cron 包;它可以是 croncrondvixie-cron , 例如)。检查守护进程是否为 运行 的一种方法是使用 ps 命令,例如:

$ ps -C cron -o pid,args
  PID COMMAND
  306 /usr/sbin/cron

一些建议。

阅读有关 RscriptPATH variable. Notice that it is set differently in interactive shells (see your ~/.bashrc) and in cron or at jobs. See also this 的更多信息。

shell 脚本替换您的命令,例如在 ~/bin/myrscriptjob.sh

myrscriptjob.sh 文件应以 #!/bin/sh

开头

确保 shell 脚本可执行:

chmod u+x ~/bin/myrscriptjob.sh

在您的 shell 脚本中添加一些日志记录,靠近开始;要么使用 logger(1) or at least some date(1) command suitably redirected,要么同时使用:

#!/bin/sh
# file myrscriptjob.sh
/bin/date +"myrscriptjob starting %c %n" > /tmp/myrscriptjob.start
/usr/bin/logger -t myrscript job starting $$
/usr/local/bin/Rscript $HOME/csv_file/write_csv.R

在上面的最后一行中,将 /usr/local/bin/Rscript 替换为在某些 interactive 终端中完成的 which Rscript 的输出。

请注意,您不应在 shell 脚本中使用 ~(但在适当的时候将其替换为 $HOME)。

最后,使用 at 来 运行 您的脚本 一次。如果你想在 crontab 作业中定期 运行 它,请给出绝对路径,例如

 5 09 11 05 * $HOME/bin/myrscriptjob.sh

并检查 /tmp/myrscriptjob.start 和系统日志是否已成功启动。

顺便说一句,在您的 myrscriptjob.sh 脚本中,您可以将第一行 #!/bin/sh 替换为 #!/bin/sh -vx(然后 shell 会详细说明执行情况,并且 cronat 将向您发送一些电子邮件)。参见 dash(1), bash(1), execve(2)

对 Rscript 和 write_csv2.R 使用完整路径(从 / 开始)。检查示例命令如下

/tmp/myscript/Rscript /tmp/myfile/write_csv2.R

确保您具有 Rscript 的执行权限和在将创建 write_csv2.R 的文件夹中的写入权限(/tmp/myfile)