我想在特定时间运行一个特定的脚本(只有一次!)。如果我像这样正常运行:
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
答案 0 :(得分:3)
有一个特殊的工具只能运行一次命令 - at
。
使用at
,您可以安排如下命令:
at 09:05 am today
at> enter you commands...
注意,您需要运行atd
守护程序。
然而,您的crontab
条目看起来不错。我建议检查cron
守护程序是否正在运行(确切的守护程序名称取决于cron程序包;它可以是cron
,crond
或vixie-cron
,实例)。检查守护程序是否正在运行的一种方法是使用ps
命令,例如:
$ ps -C cron -o pid,args
PID COMMAND
306 /usr/sbin/cron
答案 1 :(得分:1)
详细了解PATH variable。请注意,它在交互式shell(请参阅~/.bashrc
)和cron
或at
作业中以不同设置。另请参阅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)