11
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravelでschedule:runしたときのoutputがdockerで標準出力されない問題を解消

Last updated at Posted at 2020-12-01

はじめに(何が問題か)

以下のようなコマンドがあって、

app/Console/Commands/Hello.php
    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $this->output->writeLn('Hello !!');
        return 0;
    }

下記のように、スケジュール登録していたとして、

app/Console/Kernel.php
    /**
     * Define the application's command schedule.
     *
     * @param Schedule $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('app:hello')->everyMinute();
    }

artisan schedule:runしても

$ docker-compose run --rm task-scheduler
Creating task-scheduler_run ... done
Running scheduled command: '/usr/local/bin/php' 'artisan' app:hello >> '/dev/null' 2>&1

Hello !!は、標準出力されないんですね。
これを解消したという記事になります。

appendOutputTo('/dev/stdout')は効かない

\Illuminate\Console\Scheduling\EventにはappendOutputToというメソッドがあって、出力先を指定することができます。
指定しないと/dev/nullになってしまいます。
とはいえ、結論として、appendOutputTo('/dev/stdout')は効きません。

app/Console/Kernel.php
    /**
     * Define the application's command schedule.
     *
     * @param Schedule $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('app:hello')->appendOutputTo('/dev/stdout')->everyMinute();
    }

どうやって解消したか

答えは、stackoverflowにありました。

Dockerfileにて、

RUN ln -sf /proc/1/fd/1 /var/log/laravel-scheduler.log

とした上で、出力先を/var/log/laravel-scheduler.logとします。

app/Console/Kernel.php
    /**
     * Define the application's command schedule.
     *
     * @param Schedule $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('app:hello')->appendOutputTo('/var/log/laravel-scheduler.log')->everyMinute();
    }

すると、Hello !!が標準出力されるようになります。
(Dockerコンテナのリビルドをお忘れなく)

$ docker-compose run --rm task-scheduler
Creating task-scheduler_run ... done
Running scheduled command: '/usr/local/bin/php' 'artisan' app:hello >> '/var/log/laravel-scheduler.log' 2>&1
Hello !!

おわりに

Laravelに限った話ではないのかもしれませんが、とにかく何も出力されなくて困り果てていたので解決できて良かったです。
同じ状況で困っている方のお役に立てればと思います。

余談

世の中、アドベントカレンダーの季節ですが、普通に記事書いてしまいました :grinning:。。
まあ、今後も書きたいときに書いていきます。

ではでは。

11
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?