Systemd chủ yếu được sử dụng để quản lý các service trên môi trường Linux, nhưng nó cũng cho phép chúng ta quản lý các service với quyền không phải là root. Điều này, làm cho systemd trở thành một giải pháp thay thế tuyệt vời cho service như supervisord vì nó có thể phát hiện sự cố và tự khỏi động lại service.

Còn chần chừ gì nữa, chúng ta sẽ bắt đầu setting service cho Laravel Queue Workers nào.

Cài đặt Laravel Queue Workers with Systemd

Đầu tiên, chúng ta, sẽ tạo ra một file service có tên là queue-main.service nằm trong thư mục /etc/systemd/system, bằng cách chạy lệnh comamnd sau đây:

touch /etc/systemd/system/queue-main.service

Tiếp theo, chúng ta sẽ phân quyền cho file queue-main.service bằng lệnh command sau đây:

chmod 664 /etc/systemd/system/queue-main.service

Tiếp theo, bạn hay chỉnh sửa file queue-main.service như sau:

# Laravel queue worker using systemd
# ----------------------------------
#                                   
# /lib/systemd/system/queue-main.service
#                                  
# run this command to enable service:
# systemctl enable queue-main.service
[Unit]
Description=queue-service
[Service]
Type=simple
User=nginx
WorkingDirectory=/path/to/my/project
ExecStart=/usr/bin/php artisan queue:work --queue=high,default
Restart=always
StandardOutput=append:/path/to/my/project/storage/logs/queaue.log
StandardError=append:/path/to/my/project/storage/logs/queue.log
[Install]
WantedBy=multi-user.target

Để systemd nhận ra các thay đổi của bạn, bạn cần chạy lệnh command sau đây:

systemctl daemon-reload

Bây giờ, bạn có thể quản lý Laravel Queue Workers với systemd:

# Bắt đầu sử dụng service
systemctl start queue-main
# Dừng sử dụng service
systemctl stop queue-main
# Khởi động lại service
systemctl restart queue-main
# Hiện thị trang thái service
systemctl status queue-main

Nếu bạn muốn systemd này tự động khởi động khi người dùng đăng nhập, bạn có enable/disable bằng lệnh comamnd sau:

# Enable
systemctl enable queue-main
# Disable 
systemctl disable queue-main

Xem logs

Tất cả mọi thứ về lệnh PHP sẽ được ghi vào stdout, stderr và sẽ được ghi bởi journald. Bạn có thể sử dụng lệnh command sau để xem log:

journalctl -u queue-main

Tự động khởi động lại khi bị lỗi

Thành thật mà nói mọi thứ trên systemd đều có thể bị tắt khi chúng gặp sự cố và bạn muốn đảm bảo rằng nó sẽ tự khởi động lại, May mắn thay, bạn có thể chỉ định trong cấu hình systemd để nó tự khởi động lại khi gặp sự cố không mong muốn

Thêm phần sau vào [Service] trong file queue-main.service

RestartSec=10s
Restart=on-failure

Điều này làm cho systemd khởi động lại service sau 10s khi nó bị dừng với mã lỗi khác 0. Nếu bạn sử dụng exited, systemd coi công việc đã xong và không khởi động lại service cho đến khi bạn khởi động theo cách thủ công.

Nếu bạn vẫn không chắc chắn với xử lý trên, bạn có thể sử dụng crontab để xem service cho đang chạy hay không, nếu nó không chạy thì chúng ta bật service một lần nữa

Đầu tiên, bạn hãy tạo một file bash start_queue_main.sh với nội dung sau:

#!/bin/bash
  
HOME=/root
LOGNAME=root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
LANG=en_US.UTF-8
SHELL=/bin/sh
PWD=/root
systemctl is-active --quiet queue-main && echo service is running || systemctl start queue-main

Sau đó, chúng ta sẽ setting crontab cứ 1 phút sẽ chạy file bash này một lần

* * * * * /usr/bin/sh /path/to/my/bash/start_queue_main.sh >> /dev/null 2>&1

Tôi hy vọng bạn thích hướng dẫn này. Nếu bạn có bất kỳ câu hỏi nào hãy liên hệ với chúng tôi qua trang contact. Cảm ơn bạn.

CÓ THỂ BẠN QUAN TÂM

Method WhereAny / WhereAll  in Laravel Eloquent

Method WhereAny / WhereAll in Laravel Eloquent

New Laravel 10: Eloquent WhereAny() và WhereAll() Laravel cung cấp cho chúng ta khả năng xây dựng các truy vấn dữ liệu mạnh mẽ với Eloquent ORM, giúp chúng ta có thể xử lý các truy vấn cơ sở dữ li...

Google Drive as Filesystem in Laravel

Google Drive as Filesystem in Laravel

Đối với một số dự án, bạn cần phải sử dụng Google Drive (với tài khoản @gmail.com cá nhân hoặc tài khoản G Suite) làm nhà cung cấp bộ nhớ trong các dự án Laravel. Trong bài đăng này, tôi sẽ hướng d...

Defer in Laravel: Push Tasks to the Background

Defer in Laravel: Push Tasks to the Background

Deferred Functions trong Laravel Các phiên bản Laravel trước version 11, chúng ta thường sử dụng Queued Jobs cho phép thực hiện sắp xếp các tác vụ xử lý background . Nhưng đôi khi có những tác v...

Integrating CKFinder with Amazon S3 in Laravel

Integrating CKFinder with Amazon S3 in Laravel

CKFinder 3 CKFinder 3 là trình quản lý tập tin được tích hợp với CKEditor 4 và CKEditor 5. Nó giúp bạn dễ dàng đưa các tập tin và hình ảnh vào nội dung của Editor một cách an toàn. Đây là một tín...

Eloquent Methods: whereDoesntHaveRelation and whereMorphDoesntHaveRelation

Eloquent Methods: whereDoesntHaveRelation and whereMorphDoesntHaveRelation

New Laravel 11.37: Eloquent Methods Laravel cung cấp cho chúng ta khả năng xây dựng các truy vấn dữ liệu mạnh mẽ với Eloquent ORM, giúp chúng ta có thể xử lý các truy vấn cơ sở dữ liệu phức tạp một...

Laravel User Authentication

Laravel User Authentication

Trong hướng dẫn này, tôi sẽ hướng dẫn bạn xây dựng chức năng đăng nhập trong Laravel. Công bằng mà nói thì bạn có thể sử dụng Laravel UI hoặc JetStream để tự động tạo ra chức năng đăng nhập trong Lara...

Export CSV from AWS RDS - Import into MySQL with Laravel

Export CSV from AWS RDS - Import into MySQL with Laravel

Transfer Database Trong quá trình phát triển và bảo trì dự án, nhiệm vụ di chuyển cơ sở dữ liệu từ hệ thống này sang hệ thống khác là một nhiệm vụ khá là phổ biến. Chúng ta thường sẽ sử dụng câu...

Laravel Validate Video Duration

Laravel Validate Video Duration

Đôi khi trong dự án, chúng ta cần xác định thời lượng video được phép upload lên server. Nhưng rất tiếc, Laravel không cung cấp validate xác định thời lượng video để chúng ta thực hiện được. Vì vậy, t...

Laravel Socialite Login With Linkedin

Laravel Socialite Login With Linkedin

LinkedIn LinkedIn là mạng xã hội tập trung vào mạng lưới nghề nghiệp và phát triển nghề nghiệp và chuyên nghiệp lớn nhất thế giới trên internet. Bạn có thể sử dụng LinkedIn để tìm công việc hoặc...

ManhDanBlogs