首页 > 解决方案 > 关于服务器日期和 laravel cron 作业的问题

问题描述

我刚刚了解了服务器和 larave crons 中的 cron 作业,在我的 laravel 应用程序中,我在 .env 文件中设置了时区,如下所示:

APP_TIMEZONE='Europe/Madrid'

现在在我的 ubuntu VPS 中我运行了命令

date

并注意到它说的UTC比我的当地时间早一小时(英语少一小时),现在我有两个问题:

当我使用 schedule 命令从 laravel 运行 cron 作业时,应用程序会考虑什么时间来运行命令、我的 VPS 时间(UTC,少一小时)或我的 laravel 应用程序时间(欧洲/马德里)?

我想修复我的 VPS 时间,使其与我的本地时间相同(将其更改为 UTC+1 将修复它),我该如何更改日期/时区?这样做是个好主意吗?

标签: phplaravel

解决方案


Laravel Scheduler 将使用 env 文件中指定的时区,我认为您应该将时区配置保留在应用程序中,这样您就不必在新服务器中费心了。

来自 Laravel 源 Illuminate/Foundation/Console/Kernel.php

/**
     * Get the timezone that should be used by default for scheduled events.
     *
     * @return \DateTimeZone|string|null
     */
    protected function scheduleTimezone()
    {
        $config = $this->app['config'];
        return $config->get('app.schedule_timezone', $config->get('app.timezone'));
    }

它优先考虑 app.schedule_timezone 并回退到默认的 app.timezone。

或者,您可以覆盖此功能:https ://laravel.com/docs/5.8/scheduling#timezones


推荐阅读