没有不值得去解决的问题,也没有不值得去学习的技术!

Troubleshooting a Continuously Running Job Queue in Linux and Laravel 6 After Setting a Timeout

Checked the generated log file to confirm that the command had finished executing. Confirmed that the command did not finish executing because the -1 log file was not generated

1. In the task queue, Artisan::call was used to execute a command. The code is as follows:

PHP
    /**
     * 执行安装主题命令
     * @param string $themeLocation 编译后的主题所在目录
     * @param string $themeId 主题ID
     * @param bool $force 主题ID
     * @return void
     */
    public function installTheme($themeLocation, $themeId, $force)
    {
        file_put_contents(storage_path() . '/logs/ExecCommandHandler-installTheme-0-' . microtime(true) . '-' . mt_rand()  . '.txt', print_r($themeId, true), FILE_APPEND | LOCK_EX);
        $installThemeExitCode = Artisan::call('theme-store:theme:install', [
            'theme_location' => $themeLocation,
            'theme_id' => $themeId,
            'layout' => 'blade',
            '--force' => $force,
        ]);
        file_put_contents(storage_path() . '/logs/ExecCommandHandler-installTheme-1-' . microtime(true) . '-' . mt_rand()  . '.txt', print_r($themeId, true), FILE_APPEND | LOCK_EX);

        if ($installThemeExitCode !== 0) {
            abort(500, 'Install theme failed.');
        }
    }

2. Checked the generated log file to confirm that the command had finished executing. Confirmed that the command did not finish executing because the -1 log file was not generated. See Figure 1.

Checked the generated log file to confirm that the command had finished executing. Confirmed that the command did not finish executing because the -1 log file was not generated
Figure 1
Plaintext
/var/www/object/storage/logs # ls -l
total 4
-rw-r--r--    1 www      www             36 Aug 16 09:56 ExecCommandHandler-installTheme-0-1660643779.8784-1362478949.txt
/var/www/object/storage/logs # 

3. Decided to manually execute the command line in the container, and the execution failed. See Figure 2.

Decided to manually execute the command line in the container, and the execution failed
Figure 2
Plaintext
/var/www/object # php artisan theme-store:theme:install /var/www/object/storage/ap
p/theme_downloads/2022/08/16/1660643779.663.1639598452 9708e042-0b71-4667-87da-0
738232afb35 blade --force
安装主题到数据仓库
安装失败,因为: SQLSTATE[22032]: <<Unknown error>>: 3140 Invalid JSON text: "Missing a name for object member." at position 168 in value for column 'theme_asset.schema'. (SQL: insert into `theme_asset` (`asset_key`, `theme_id`, `mime_type`, `created_at`, `content`, `schema`, `category`, `updated_at`) values (apps/internal/comment/blocks/comment.blade.php, 9708e042-0b71-4667-87da-0738232afb35, text/html, 2022-08-16 10:12:52, @php
  $enable = $product[\'review_status\'] === \'open\';
@endphp
 
@if($enable)
  <link rel=\"preload\" as=\"style\" onload=\"this.rel=\'stylesheet\'\" href=\"{{ \'app.css\' | theme_asset_url }}\">
 
  @script
    <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%3E%0A%20%20%20%20%20%20Object.assign(window.plugins%2C%20%7B%0A%20%20%20%20%20%20%20%20comment%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20name%3A%20%5C'%7B%7B%20%40config(%5C'comment.name%5C')%20%7D%7D%5C'%2C%0A%20%20%20%20%20%20%20%20%20%20template%3A%20%5C'%7B%7B%20%40config(%5C'comment.template%5C')%20%3F%3F%20%5C%22tile%5C%22%20%7D%7D%5C'%2C%0A%20%20%20%20%20%20%20%20%20%20count%3A%20%7B%7B%20%40config(%5C'comment.count%5C')%20%3F%3F%204%20%7D%7D%2C%0A%20%20%20%20%20%20%20%20%20%20comment_time%3A%20%5C'%7B%7B%20%40config(%5C'comment.comment_time%5C')%20%3F%3F%20%5C%22no%5C%22%20%7D%7D%5C'%2C%0A%20%20%20%20%20%20%20%20%20%20comment_country%3A%20%5C'%7B%7B%20%40config(%5C'comment.comment_country%5C')%20%3F%3F%20%5C%22no%5C%22%20%7D%7D%5C'%2C%0A%20%20%20%20%20%20%20%20%20%20comment_account%3A%20%5C'%7B%7B%20%40config(%5C'comment.comment_account%5C')%20%3F%3F%20%5C%22no%5C%22%20%7D%7D%5C'%2C%0A%20%20%20%20%20%20%20%20%20%20comment_fives_star%3A%20%5C'%7B%7B%20%40config(%5C'comment.comment_fives_star%5C')%20%3F%3F%20%5C%22no%5C%22%20%7D%7D%5C'%2C%0A%20%20%20%20%20%20%20%20%20%20comment_four_star%3A%20%5C'%7B%7B%20%40config(%5C'comment.comment_four_star%5C')%20%3F%3F%20%5C%22no%5C%22%20%7D%7D%5C'%2C%0A%20%20%20%20%20%20%20%20%20%20comment_counts%3A%20%7B%7B%20%40config(%5C'comment.comment_counts%5C')%20%3F%3F%200%20%7D%7D%2C%0A%20%20%20%20%20%20%20%20%20%20translate%3A%20%5C'%7B%7B%20%40config(%5C'comment.translate%5C')%20%3F%3F%20%5C%22Y%5C%22%20%7D%7D%5C'%2C%0A%20%20%20%20%20%20%20%20%20%20store_template%3A%20%5C'%7B%7B%20%40config(%5C'comment.store_template%5C')%20%3F%3F%20%5C%22tile%5C%22%20%7D%7D%5C'%2C%0A%20%20%20%20%20%20%20%20%20%20store_count%3A%20%7B%7B%20%40config(%5C'comment.store_count%5C')%20%3F%3F%20%5C'4%5C'%20%7D%7D%2C%0A%20%20%20%20%20%20%20%20%20%20store_comment_time%3A%20%5C'%7B%7B%20%40config(%5C'comment.store_comment_time%5C')%20%3F%3F%20%5C%22no%5C%22%20%7D%7D%5C'%2C%0A%20%20%20%20%20%20%20%20%20%20store_comment_country%3A%20%5C'%7B%7B%20%40config(%5C'comment.store_comment_country%5C')%20%3F%3F%20%5C%22no%5C%22%20%7D%7D%5C'%2C%0A%20%20%20%20%20%20%20%20%20%20comment_import%3A%20%40json(%40config(%5C'comment.comment_import%5C')%20%3F%3F%20%5B%5D)%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D)%0A%20%20%20%20%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" />
  @endScript
 
  <section class=\"section rendering\">
    <h2 class=\"text-2xl text-center md:text-left font-normal leading-loose\">
      {{ \'comment.customer_review\' | t }}
    </h2>
    <div class=\"flex flex-col items-center justify-start sm:flex-row md:justify-between mb-4 gap-4\">
      <div class=\"sm:flex-1 flex-col flex sm:flex-row items-center\">
        <div class=\"sm:inline-block max-w-[280px] inline-flex items-center py-2 grow\">
          <div class=\"inline-block bg-slate-200 text-5xl sm:text-6xl sm:text-left text-center mr-1\">{!! str_repeat(\' \', 6) !!}</div>
          <div class=\"w-1/2 sm:w-full text-left mt-2\">
            <div class=\"h-5 w-24 bg-slate-200\"></div>
            <div class=\"h-5 w-4/5 mt-1 bg-slate-200\"></div>
          </div>
        </div>
        <ul class=\"inline-block\">
          @for ($i = 0; $i < 5; $i++)
          <li class=\"w-60 h-4 mb-1.5 bg-slate-200\"></li>
          @endFor
        </ul>
      </div>
      <div class=\"w-full sm:w-36\">
        <div class=\"h-10 my-6 bg-slate-200\"></div>
      </div>
    </div>
  </section>
@endif
 
 
 
, {
  "name": "商品评论",
  "target": "section",
  "templates": ["product_detail"],
  "available_if": "{{ is_module_enabled('Comment') }}",
  "javascript": "app.js",
}, app_block, 2022-08-16 10:12:52))
/var/www/object # 
 

4. The root cause is that the command line execution failed but did not throw an exception. If an exception were thrown, the task queue would not remain in a running state and would fail automatically.

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系