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

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

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

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

PHP

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

Laravel 5

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

解決済

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

YYYQQQ
YYYQQQ

総合スコア45

cron

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

PHP

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

Laravel 5

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

1回答

0評価

0クリップ

171閲覧

投稿2022/06/26 17:57

編集2022/06/28 23:50

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'); } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

gU8C8Nud4E8p3uW

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

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

cron

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

PHP

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

Laravel 5

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