読者です 読者をやめる 読者になる 読者になる

ぱらつり記

No description

cronでRubyを動かそうとしてハマる

ネタ不足感が強まって話題力の低下を感じるぱらつりです。

ドット入りのファイル名でcronディレクトリに置いたシェルスクリプトが発火しないのが解決したと思ったら、今度はcronでRuby定期実行させようとしてハマりました。
またエラーをよく読まずに雑な勘違いをしたことが原因でした。しにたい

# hoge/test.rb
require 'twitter'

# ほげほげ
open("log", "w") do |f|
  f.write("something")
end

と雑に書いたスクリプト。ローカルでの動作を確認してからcrontabに登録した。

# crontab -e
10 17 * * * cd hoge && ruby test.rb

が、出力がない

Gemがコケてるだって!?

mailコマンドを叩くと新着メールを発見。

From: root@raspberrypi (Cron Daemon)
To: paltee@raspberrypi
Subject: Cron <paltee@raspberrypi> cd hoge && ruby test.rb
Content-Type: text/plain; charset=UTF-8
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/paltee>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=paltee>

/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- twitter (LoadError)
        from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /home/paltee/hoge/test.rb:1:in `<top (required)>'
        from test.rb:1:in `require_relative'
        from test.rb:1:in `<main>'

Gemが見つからないらしい。適当にネットで調べてパスを追加してみる

# crontab -e
RUBYLIB="/usr/local/lib/tuby/2.1.0"
GEM_HOME="/usr/local/lib/ruby/gems/2.1.0"
24 17 * * * cd hoge && ruby test.rb

権限がないだって!?

やっぱり来ない

めーる

From: root@raspberrypi (Cron Daemon)
To: paltee@raspberrypi
Subject: Cron <paltee@raspberrypi> cd hoge && ruby test.rb
Content-Type: text/plain; charset=UTF-8
X-Cron-Env: <RUBYLIB=/usr/local/lib/ruby/2.1.0>
X-Cron-Env: <GEM_HOME=/usr/local/lib/ruby/gems/2.1.0>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/paltee>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=paltee>

/usr/local/lib/ruby/2.1.0/fileutils.rb:250:in `mkdir': Permission denied - /usr/local/lib/ruby/gems/2.1.0/extensions/arm-linux (Errno::EACCES)
        from /usr/local/lib/ruby/2.1.0/fileutils.rb:250:in `fu_mkdir'
         :
        (略)
         :
        from /usr/local/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:144:in `require'
        from test.rb:1:in `<main>'

Permission denied …だって…?

やっぱり勘違い

察しの良い方はお気づきかと思いますが、最初のメールの

/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- twitter (LoadError)

GEM_HOME="/usr/local/lib/ruby/gems/2.1.0"

バージョンが違いますね(╹◡╹)。
当然Gemの内容も違いますね(╹◡╹)。

$ which ruby
/usr/local/bin/ruby

まさかと思いながら書き換え

# crontab -e
PATH=$PATH:/usr/local/bin
46 17 * * * cd hoge && ruby test.rb
~/hoge $ ls
log  test.rb

通ったわ