pandazx's blog

データ分析など雑多な技術ブログ

cronで実行したシェルから呼ばれるRubyスクリプトの標準出力が出力されない

test.sh

#!/bin/sh
ruby test.rb
echo done

test.rb

puts 'hoge'

上記スクリプトがあった場合に、以下のようにcronを設定しても、test.sh のdoneしかtest.logには出力されない。

0 * * * * cd /home/user/tools; sh test.sh >> ./test.log

cronで実行される際、環境変数は実行ユーザでログインした場合はとは異なるという問題もある。

参考:cronで実行時に環境変数を読み込む - Qiita

以下のようにして環境変数を読み込む -l オプションをつけて、-c でコマンドを実行させればよい。

0 * * * * /bin/bash -lc 'cd /home/user/tools; sh test.sh >> ./test.log'