Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ruby脚本cron不工作_Ruby_Cron_Ubuntu 14.04 - Fatal编程技术网

ruby脚本cron不工作

ruby脚本cron不工作,ruby,cron,ubuntu-14.04,Ruby,Cron,Ubuntu 14.04,我在~/scri.rb中有一个ruby脚本 File.open('~/newfile.txt', 'a+') do |f| f << "hi..\n" end 当我检查/var/log/syslog中的日志时,我看到如下条目 * * * * * bash -lc 'ruby ~/scri.rb' >> /var/log/syslog Sep 8 14:49:01 user1acer CRON[26063]: (user1) CMD (bash -lc 'ruby

我在~/scri.rb中有一个ruby脚本

File.open('~/newfile.txt', 'a+') do |f|
  f << "hi..\n"
end
当我检查/var/log/syslog中的日志时,我看到如下条目

* * * * * bash -lc 'ruby ~/scri.rb' >> /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文件时,我没有看到任何内容


我在这里遗漏了什么吗?

事实上,这与cron无关<代码>~是shell的一个特性,Ruby不知道它是什么。Ruby中只有一些方法处理
~
,例如
File::expand\u 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+
]

请参阅(boldemphasis mine)的文档:

展开路径(文件名[,目录字符串])
→ <代码>abs文件名
将路径名转换为绝对路径名。除非给出了
dir\u string
,否则从流程的当前工作目录引用相对路径,在这种情况下,它将用作起点给定路径名可以以“~”开头,扩展到进程所有者的主目录(必须正确设置环境变量
home
)。“~user”扩展到命名用户的主目录


您需要在cron中使用完整路径。因此,不要写
~/newfile.txt
,而是写
/home/your_user/newfile.txt
,以便cron知道文件的位置。事实上,您可能在
/
中有这个文件,它是root的home dir.newfile.txt在home directory中。好的,我不熟悉Ruby。因此,如果您想打开该文件以附加内容,则需要告诉cron其完整路径。请使用
/home/…
而不是前面所说的
~
。通常,root的主目录是
/root
,而不是
/
。这里的关键是通过cron.Ah运行脚本时没有设置环境变量home。我甚至没有想到要调查那么远,因为OP的脚本在根本没有涉及cron的情况下已经收支平衡。从cron运行登录shell时也是这样吗?我以为登录shell的任务是设置
$HOME
,而不是cron的。事实上我错了,只是在
***echo“$HOME”>/tmp/myhome
中检查了它。真正的情况是
env
包含的值比正常会话少得多。当然,
~
不能被cron理解,因此必须给出一个有效的路径。我想。事实上,它可能被引用得“太多”,所以根本就没有被解释。哦,我多么喜欢处理多层次的字符串解释和引用。不