質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

778閲覧

cronでrubyが実行不可

decatail

総合スコア41

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2019/07/14 06:52

編集2019/07/14 10:56

前提・実現したいこと

リンク先:vdeep.net様と同じ事をしようとしています。毎分ごとにhello.rbを動かしたいのですが動きません。この場合何が原因と考えられるでしょうか。ご教授ください。

該当のソースコード

Hello.rb(vdeep.netより拝借)

Ruby

1require "date" 2 3d = DateTime.now 4File.open('hello-ruby.txt', 'w') do |file| 5 file.puts(d.strftime("%Y%m%d %H%M%S")) 6end

補足情報(FW/ツールのバージョンなど)

conohaVPSにてUbuntu18.04.02を使用

vpsuser@ipaddress:~$ crontab -l # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command PATH=$PATH:/home/vpsuser/.rbenv/shims * * * * * ruby ~/hello.rb
vpsuser@ipaddress:~$ ls -l -rwx------ 1 vpsuser vpsuser 121 Jul 14 15:36 hello.rb vpsuser@ipaddress:~$ which ruby /home/vpsuser/.rbenv/shims/ruby vpsuser@ipaddress:~$ ruby -v ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux] vpsuser@ipaddress:~$ crontab -l | file - /dev/stdin: ASCII text vpsuser@ipaddress:/etc$ ls cron* crontab cron.d: mdadm popularity-contest cron.daily: apport aptitude dpkg man-db mlocate passwd ubuntu-advantage-tools apt-compat bsdmainutils logrotate mdadm ntp popularity-contest update-notifier-common cron.hourly: cron.monthly: cron.weekly: man-db update-notifier-common

追記

コメントの指摘で、ruby,スクリプト共に絶対パスで指定しましたが、やっぱりうまくいきません。「PATH=$PATH:~」の行をなくしても同様です。

PATH=$PATH:/home/vpsuser/.rbenv/shims:/usr/bin * * * * * /home/vpsuser/.rbenv/shims/ruby /home/vpsuser/hello.rb >> /var/log/hello.log 2>&1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2019/07/14 08:07

まずは、 rubyも絶対パスで、スクリプトも~の指定ではなく、絶対パスで指定しましょう。
decatail

2019/07/14 10:54

追記いたしました。
otn

2019/07/14 12:52

> 動きません。 具体的な現象を書いてください。
decatail

2019/07/14 13:31

コメントありがとうございます。hello-ruby.txtという日時を格納したテキストファイルを作成しようとするプログラムを定期的に起動させようとしていますが、何らかの原因でテキストファイルが作成できないという事です。
otn

2019/07/14 13:42

したいことはプログラムから分かりますが、「具体的な現象」というのは、起こっていないことじゃなくて、起こっていることを書いて欲しかったのです。
decatail

2019/07/14 13:54 編集

私の目からは何も起こっていないように見えます。
otn

2019/07/14 14:10

エラーメッセージが出ていることを、「動かない」と書く人も多いので。 プログラムが作るはずのファイルが作られていないこと以外は何も確認できていないと言うことですかね。 エラーメッセージが出ていれば、メール設定がちゃんとしていればrootからメールが届いているはずですが、届いていませんか? ls -l $MAIL の結果は?
decatail

2019/07/14 14:24

コメントありがとうございます。crontab -eのインストール時にはエラー等はありませんでした。解決前の状況ではログを出力するhello.logが生成できない状況でした。解決後にですが、hello.rbのあるフォルダ(ホームフォルダ)で「ls -l $MAIL」とすると「ls: cannot access '%MAIL': No such file or directory」でした。
otn

2019/07/14 14:43

> '%MAIL': タイプミスしていませんか?
decatail

2019/07/14 14:48

すみません。結果が違うので多分タイプミスです。 「vpsuser@ipaddress:~$ ls -l $MAIL」とすると 「ls: cannot access '/var/mail/vpsuser': No such file or directory」でした。
decatail

2019/07/14 14:50

cronをよく知らないので「メール設定」なる存在さえも存じ上げていませんでした。今後ログの出力等では解決できないようであれば探ってみたいと思います。
otn

2019/07/14 14:53

そういう結果ならメールは来ていませんね。メール設定が出来ていないと思われます。 cronを使うなら、メール設定しておかないと不便です。
decatail

2019/07/14 14:59

ありがとうございます。心得ておきます。
guest

回答2

0

ベストアンサー

そういう時はcronのログ見てみてみるといいですよ
質問文見る限りcronの書き方に従ってないのでエラー出てるだけでしょうけど、そんな書き方した事無いのでエラーで止まるのかスキップしてくれるのかは分からないな

投稿2019/07/14 07:10

hentaiman

総合スコア6421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

decatail

2019/07/14 07:37

コメントありがとうございます。ログというものは初めて知りました。確認してみると、/var/log/cron.logが生成されないようです。
hentaiman

2019/07/14 08:08

遠回しに書き方って書いたけど、PATH=$PATH:/home/vpsuser/.rbenv/shimsは合ってますか? 質問文にも書かれている通りcrontabのテンプレートに以下コメントありますよ # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ まずはここ例に倣いましょう
scsi

2019/07/14 08:47

確かに書き方間違ってましたね。
decatail

2019/07/14 10:53

「* * * * * tar -zcf /home/vpsuser/hello.tgz /home/vpsuser/hello.rb」ではhello.tgzは作成されました。しかし追記した通り例に倣って作成したRubyでは動きませんでした。
hentaiman

2019/07/14 11:47

絶対パスだろうが相対パスだろうがパスさえ正しければ動くけどね~ cronに設定したコマンドをcron通さずに直接打てば動作する事は確認済みですよね?
decatail

2019/07/14 14:17

解決しました。ありがとうございます。確認済みではありませんでした。その発想はなかったです。 「$ /home/vpsuser/.rbenv/shims/ruby /home/vpsuser/hello.rb >> /var/log/hello.log 2>&1」だと「-bash: /var/log/hello.log: Permission denied」と出ました。>>以降を除いた「$ /home/vpsuser/.rbenv/shims/ruby /home/vpsuser/hello.rb」だとhello-ruby.textが生成され中身も「20190714 230501」と期待通りに出ました。その後「$ sudo touch /var/log/hello.log」、「sudo chmod 777 hello.log」とした後、crontabに>>以降を追記すると、hello.logにエラー表示の無い空白のままhello-ruby.txtが1分ごとに更新され続けるという当初の目的通りの結果となりました。質問文には~から始まるパスが使われていたので私はそれを使ったに過ぎないのですが、貴殿の言う通り私の環境下では使う事が出来なかったという事なのですね。ありがとうございます。
guest

0

下記に変更してエラーをログから確認しましょう。

cron

1* * * * * ruby ~/hello.rb >> /var/log/hello.log 2>&1

投稿2019/07/14 07:05

scsi

総合スコア2840

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

decatail

2019/07/14 07:36

ログなる物があるのは初めて知りましたが、貴殿が提示した通りに変更してもhello.logが出力されないようです。
scsi

2019/07/14 11:22

記述を修正しても hello.logは生成されてませんか?
decatail

2019/07/14 11:29

コメントありがとうございます。残念ながらまだありません……。
otn

2019/07/14 13:44

一般ユーザーだと/var/log/には書けないので、/tmp/に書きましょう。
decatail

2019/07/14 14:32

ありがとうございます。ご指摘の通りrootユーザーではありませんでした。次からは/tmp/にログを出力させます。
scsi

2019/07/14 14:46

あー、確かに。普段 root オペレーションが多くて盲点でした。ご指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問