在特定时间运行cronjob

时间:2016-05-11 07:10:47

标签: linux crontab

我想在特定时间运行一个特定的脚本(只有一次!)。如果我像这样正常运行:

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

确实有效。然而,我想在cronjob中编程以在10:50运行,因此执行以下操作:

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

3 个答案:

答案 0 :(得分:3)

有一个特殊的工具只能运行一次命令 - 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

答案 1 :(得分:1)

一些建议。

详细了解PATH variable。请注意,它在交互式shell(请参阅~/.bashrc)和cronat作业中以不同设置。另请参阅this关于Rscript

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

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

开头

确保使该shell脚本可执行:

chmod u+x ~/bin/myrscriptjob.sh

在开始附近的shell脚本中添加一些日志记录;使用logger(1)或至少某些date(1)命令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替换为某些交互式终端中完成的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会对执行情况详细,cron或{{1会发给你一些电子邮件)。请参阅dash(1)bash(1)execve(2)

答案 2 :(得分:0)

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

  

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

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