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

Encrypted HTTP Live Streaming with Laravel FFMpeg

Encrypted HTTP Live Streaming with Laravel FFMpeg

HTTP Live Streaming (HLS)  HTTP Live Streaming (HLS) là một trong những giao thức phát trực tuyến video được sử dụng rộng rãi nhất . Mặc dù nó được gọi là HTTP "live" streaming, nhưng nó được sử dụn...

Amazon S3 Pre-Signed URL with DropzoneJs in Laravel

Amazon S3 Pre-Signed URL with DropzoneJs in Laravel

Chức năng upload file hay hình ảnh là một chức năng rất phổ biến, hầu hết các dự án đều có chức năng này. Đa số các nhà phát triển khi thực hiện chức năng upload file, thường sẽ sử dụng cách làm nh...

Integrating OpenAI in Laravel

Integrating OpenAI in Laravel

OpenAI OpenAI là một phòng thí nghiệm nghiên cứu trí tuệ nhân tạo (AI) của Mỹ bao gồm tổ chức phi lợi nhuận OpenAI Incorporated (OpenAI Inc.) và công ty con hoạt động vì lợi nhuận OpenAI Limited Par...

Integrating TinyMCE in Laravel 10 using Vite

Integrating TinyMCE in Laravel 10 using Vite

TinyMCE TinyMCE là một trình soạn thảo WYSIWYG được xây dựng trên nền tảng Javascript, được phát triển dưới dạng mã nguồn mở theo giấy phép MIT bởi Tiny Technologies Inc. TinyMCE cho phép ngư...

Laravel Task Scheduling

Laravel Task Scheduling

Trong các ứng dụng lớn, bạn cần lên lịch định kì cho các công việc bằng Cron jobs.  Tại số một số thời điểm, việc quản lý các cron jobs trở nên cồng kềnh và khó khăn hơn. Laravel Scheduler là một côn...

Laravel Migration

Laravel Migration

Migration cho phép các nhà phát triển (Developer) nhanh chóng tạo ra cở sở dữ liệu của ứng dụng mà không cần vào màn hình quản lý cơ sở dữ liệu hay chạy bất kì một câu lệnh SQL nào. Trước hết, nếu...

Laravel Change Expire Time Cookie Remember

Laravel Change Expire Time Cookie Remember

Vấn đề Đôi khi, trang web của bạn chỉ muốn người dùng sử chức năng remembering users  trong 7 ngày hoặc là 30 ngày chẳng hạn. Nhưng Authentication của Laravel không cung cấp cho chúng ta tùy chọn đ...

Laravel Upload File Using Trait

Laravel Upload File Using Trait

Hiện nay, đa số các dự án đều có chức năng upload file, nên tôi đã thử xây dựng một lớp Trait Upload File, để chúng ta dễ dàng sao chép qua các dự án khác để sử dụng, nhằm rút ngắn thời gian phát triể...

Laravel Routing

Laravel Routing

Route là gì? Đúng như tên gọi của nó, Route thực hiện chức năng định tuyến, dẫn đường cho các HTTP request gửi đến đúng nơi mà ta mong muốn. Với sự phát triển mạnh mẽ của ứng dụng web ngày nay, việc...

ManhDanBlogs