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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

2173閲覧

Laravel5.8でcronが動かない。(「php artisan schedule:run」を行うと動く)

YYYQQQ

総合スコア54

cron

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2022/06/26 17:57

編集2022/06/27 14:24

Cronを使用して、毎分ごとにtwitterで未投稿の予約ツイートをツイートするようにしています。
crontab -eで下記のように設定しています。

* * * * * cd /Applications/MAMP/htdocs/twitter && php artisan schedule:run >> /dev/null 2>&1

(ここの記述に倣いました。https://readouble.com/laravel/5.8/ja/scheduling.html
ただ、書いた内容がよくわからず、何を読めばいいでしょうか。。)

「php artisan schedule:run」を行うと想定通りの動きとなります。

考えられる原因パターンと解決策はございますでしょうか。

=============================================

以下、補足情報です。引き続き確認していきますが、今の時点で何かわかること等あれば是非ご教示ください。

・バージョン:Laravel Framework 5.8.38、PHP 7.4.29

・$ service crond statusと$ systemctl status crond.service結果

$ service crond status -bash: service: command not found $ systemctl status crond.service -bash: systemctl: command not found

・$ ps aux | grep crond 結果

ps aux | grep crond yyyqqq 76186 0.0 0.0 4295688 848 s004 S+ 2:47AM 0:00.01 grep crond

・(追記)以下のような単純なプログラムで試したところ、cronは動いていることがわかりました。
https://qiita.com/suzu12/items/e12b3a8c6cbc3ea81720

・実行するファイルの権限

-rwxrwxrwx 1 yyyqqq admin 2178 6 27 01:47 AutoTweet.php

・$ cat /var/log/cron 結果

$ cat /var/log/cron cat: /var/log/cron: No such file or directory

・/etc/init.d/crond startの結果

$ /etc/init.d/crond start -bash: /etc/init.d/crond: No such file or directory

・Kernel.phpの記載内容

<?php namespace App\Console; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; class Kernel extends ConsoleKernel { /** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ \App\Console\Commands\AutoTweet::class ]; /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { // auto:tweetコマンドを毎分実行する $schedule->command('command:auto_tweet')->everyMinute(); } /** * Register the commands for the application. * * @return void */ protected function commands() { $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } }

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/06/27 00:14

どのユーザー権限下で動作させることを想定していますか?
phper.k

2022/06/27 02:08

実行環境はなんですかね?
AbeTakashi

2022/06/27 04:15 編集

「cd /Applications/MAMP/htdocs/twitter && php artisan schedule:run」をまるっと叩いてみるとどうでしょうね? 単純にcd以下のパスが間違ってる可能性もあるかと。あとは which php してみて、phpコマンドもフルパスで書いてみるとか。そもそもcron自体が動いてない可能性もありますよね。phper.kさんが書いてますが、動作環境も明記された方がいいでしょうし、cronが本当に動いてるかの動作確認もされた方がいいかもです。現状の要素だと回答がでなさそう(要因が色々ありそうで絞りきれない)なので、とにかく分かる範囲で必要な情報を質問文に追記されると良いかと思います。
YYYQQQ

2022/06/27 11:30

ご返信頂き誠にありがとうございます。 取り急ぎ以下回答させて頂きます。 >どのユーザー権限下で動作させることを想定していますか? どのように考えればよいかよくわかっておらず、何も想定できていない状況です。。 どのような場合はどうとかあるでしょうか...? >実行環境はなんですかね? 以下の環境で作業をしています。 ・macOS Mojave version 10.14.6 ・Laravel Framework 5.8.38 (ローカルで「php artisan serve」でサーバー起動して作業) ・PHP 7.4.29 ・ターミナルのデフォルトのシェル:bash (他に何か情報が必要でであればご教示ください) >「cd /Applications/MAMP/htdocs/twitter && php artisan schedule:run」をまるっと叩いてみるとどうでしょうね? 「cd /Applications/MAMP/htdocs/twitter && php artisan schedule:run」を叩いて見た結果、正しく動作しましたので、パスは合っていると¥ようです。 >which php してみて、phpコマンドもフルパスで書いてみるとか。 $ which phpで「/usr/local/opt/php@7.4/bin/php」と出たので、「* * * * * /usr/local/opt/php@7.4/bin/php cd /Applications/MAMP/htdocs/twitter && php artisan schedule:run >> /dev/null 2>&1」と書き換えてみましたが、動きませんでした。 >cronが本当に動いてるかの動作確認 これは昨日私も確認したく、以下のようなコマンドを打ったのですが、コマンドが効かず確認できていない状況でした。ちなみに、cronが動いているかの確認について、以下のようなコマンドで確認していくものでしょうか。それとも違うやり方などあるのでしょうか。。 $ service crond status -bash: service: command not found $ systemctl status crond.service -bash: systemctl: command not found
AbeTakashi

2022/06/27 11:46

>$ which phpで「/usr/local/opt/php@7.4/bin/php」と出たので、「* * * * * /usr/local/opt/php@7.4/bin/php cd /Applications/MAMP/htdocs/twitter && php artisan schedule:run >> /dev/null 2>&1」 これじゃだめでしょう。やるなら「* * * * * cd /Applications/MAMP/htdocs/twitter && /usr/local/opt/php@7.4/bin/php artisan schedule:run >> /dev/null 2>&1」だと思います。 cronが本当に動いてるかどうかは、単純なスクリプトで動作確認するのが一番確実です(MacOSだとserviceコマンドやsystemctlコマンドは使えないはずです。)。 参考) https://qiita.com/suzu12/items/e12b3a8c6cbc3ea81720
otn

2022/06/27 12:33 編集

とりあえずは、「MacOS入門」とかの本を買って読むのでしょうか。「MacOSはLinuxではない」という理解から始めましょう。 OSでもプログラミング言語でもなんでもそうですが、入門せずに使おうとすると、一歩歩くたびに転んでしまうので、効率が悪いというか、数歩歩けるかどうかも怪しいです。
YYYQQQ

2022/06/27 14:31 編集

>これじゃだめでしょう。やるなら「* * * * * cd /Applications/MAMP/htdocs/twitter && /usr/local/opt/php@7.4/bin/php artisan schedule:run >> /dev/null 2>&1」だと思います。 ご指摘ありがとうございます。こちらに修正しましたが、変化はありませんでした。 >cronが本当に動いてるかどうかは、単純なスクリプトで動作確認するのが一番確実です こちらもありがとうございます。参考で頂いたサイトを見て、単純なスクリプトで動作確認したところ、cronは動いていることがわかりました。 >「MacOS入門」 後日読んでみます。。cronの件は何かわかりますでしょうか?
otn

2022/06/27 14:44

> cronは動いていることがわかりました。 では、 cd /Applications/MAMP/htdocs/twitter && /usr/local/opt/php@7.4/bin/php artisan schedule:run > /tmp/xxxx.txt 2>&1 にして、実行して /tmp/xxxx.txt の中身を見ましょう。 出力を /dev/null に捨てるのは完成してからです。
AbeTakashi

2022/06/27 14:45

あとは標準出力や標準エラー出力を/dev/nullに投げてるのをどこかのファイルに出力して中身を覗いてみるとか、実はcronは実行されているがPHP側でエラーが起きてる可能性があるかもなので、Laravelで出力されるログを確認するくらいじゃないでしょうかね? 簡単なスクリプトでは動いてるのですから、そこから徐々にPHPの処理に寄せていくような感じで(例えば単純なPHPの処理なら動くのか?とか)、どの辺に不具合があるのかを確かめていくしか無いと思います。 参考) https://qiita.com/kkoito/items/28d9a453c425b08738d2
YYYQQQ

2022/06/27 16:37 編集

アドバイス頂き誠にありがとうございます! 原因がよくわからないのですが、期待通りの動きをするようになりました。。 最初に、cron_log.txtというファイルを作り以下のコマンドを行なったところ、cron_log.txtにログが記載され、それと同時に、なぜかtwitterへの投稿も行われ、期待通りの動きになりました。 「* * * * * cd /Applications/MAMP/htdocs/twitter && /usr/local/opt/php@7.4/bin/php artisan schedule:run >> /tmp/cron_log.txt 2>&1」 (ログでは「Running scheduled command: '/usr/local/Cellar/php@7.4/7.4.29/bin/php' 'artisan' command:auto_tweet > '/dev/null' 2>&1」が1分毎に追記されていました) そこで、もう一度以下を試したのですが、こちらでも期待通りの動きになりました。以前の記述と比較したのですが、差分はありませんでした。。(もし何か原因など気づく点あればご教示ください...) 「* * * * * cd /Applications/MAMP/htdocs/twitter && /usr/local/opt/php@7.4/bin/php artisan schedule:run >> /dev/null 2>&1」 どうもありがとうございましたm(__)m
otn

2022/06/27 21:52

原因としては、 ・タイプミスがあった(全角空白など目に見えない部分も含め) ・crontabに登録したつもりだったが出来ていなかった などでしょうか。
AbeTakashi

2022/06/28 02:27 編集

良かったです。解決方法を自分で記載されて、自己解決でこの質問をクローズされると良いかと思います。ちなみにcronでコマンド叩く際はフルパスにしとくと何かと安心かと思います。
YYYQQQ

2022/06/28 05:16

なるほどです。。ありがとうございました!
guest

回答1

0

自己解決

原因が定かではないですが、解決に至りました。
行なったこととしては、「which php」をしてphpコマンドもフルパスで以下のように追記しました。
また、エラーの確認のため、出力先を「/dev/null 」ではなく「/tmp/cron_log.txt 」に変更しました。(cron_log.txtは事前にこちらで作成。)
「* * * * * cd /Applications/MAMP/htdocs/twitter && /usr/local/opt/php@7.4/bin/php artisan schedule:run >> /tmp/cron_log.txt 2>&1」
この時点でエラーが出ずに期待通りの動きとなったため、「/tmp/cron_log.txt 」を「/dev/null 」に戻し、以下の記述でも期待通りの動きとなることを確認しました。
「* * * * * cd /Applications/MAMP/htdocs/twitter && /usr/local/opt/php@7.4/bin/php artisan schedule:run >> /dev/null 2>&1」

投稿2022/06/28 05:19

YYYQQQ

総合スコア54

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

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

otn

2022/06/28 05:40

解決して良かったですが、普通は >> /dev/null 2>&1 とは書きません。> /dev/null 2>&1 と書きます。 参考サイトも>>になってますが、おそらく最初、>> /tmp/cron_log.txt 2>&1 のようにファイルが書いてあって、/dev/null に書き換えた時の修正漏れでしょう。>> /dev/null でも、間違った動作をするわけじゃないですが。 なお、質問のコメントに書きましたが、/dev/null に書くというのはエラーメッセージを読まずに捨てている訳ですから、原因究明を最初から放棄していることになります。
YYYQQQ

2022/06/28 14:50

なるほどです。。勉強になります。補足頂きありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問