ruby脚本cron不工作

时间:2016-09-08 09:24:26

标签: ruby cron ubuntu-14.04

enter image description here我在〜/ scri.rb

中有一个ruby脚本
File.open('~/newfile.txt', 'a+') do |f|
  f << "hi..\n"
end

我有一个像这样的cron标签

* * * * * bash -lc 'ruby ~/scri.rb' >> /var/log/syslog

当我检查/ var / log / syslog中的日志时,我看到这样的条目

Sep  8 14:49:01 user1acer CRON[26063]: (user1) CMD (bash -lc 'ruby ~/scri.rb' >> /var/log/syslog)
Sep  8 14:50:01 user1acer CRON[27502]: (user1) CMD (bash -lc 'ruby ~/scri.rb' >> /var/log/syslog)
Sep  8 14:51:01 user1acer CRON[29006]: (user1) CMD (bash -lc 'ruby ~/scri.rb' >> /var/log/syslog)
Sep  8 14:52:01 user1acer CRON[30425]: (user1) CMD (bash -lc 'ruby ~/scri.rb' >> /var/log/syslog)
Sep  8 14:53:01 user1acer CRON[31846]: (user1) CMD (bash -lc 'ruby ~/scri.rb' >> /var/log/syslog)

但是当我检查newfile.txt文件时,我什么都没看到。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:2)

实际上,这与cron无关。 ~是shell的一个特性,Ruby不知道它是什么。只有Ruby中的一些方法处理~,例如File::expand_path。因此,Ruby正在尝试在当前工作目录中的名为newfile.txt的目录中打开名为~的文件。自己尝试一下:在主目录中创建一个名为~的空目录,果然,1分钟后,您应该找到一个名为newfile.txt的新文件,其中包含hi..个内容

有几种方法可以解决这个问题,我将把它留给你使用哪一个:

File.open(File.expand_path('~/newfile.txt'), 'a') do |f| end
File.open(File.join(Dir.home, 'newfile.txt'), 'a') do |f| end

[注意:如果您只想附加到文件末尾,不要四处移动或阅读,a就足够了,您不需要a+。]

请参阅File::expand_path的文档(粗体强调我的):

  

expand_path(file_name [, dir_string] )abs_file_name

     

将路径名转换为绝对路径名。除非给出dir_string,否则从进程的当前工作目录引用相对路径,在这种情况下,它将用作起始点。 给定的路径名​​可能以“”开头,后者会扩展到进程所有者的主目录(必须正确设置环境变量HOME)。 “ ~user ”扩展到指定用户的主目录。