Laravel: Run Queue in the Background using PM2

To run the Laravel queue, you need to run a command like:

php artisan queue:work --queue=high,medium,low

This is what you can use in your local development environment. But in production, you can not just type this command and keep this running, as soon as you exit your terminal, this command will terminate.

So what to do in this case?

In production, you have to run this command using some process manager to keep the command running. 2 simplest way to do that is using Supervisor or PM2.

I use pm2 in such cases, as this seems simpler to me. Let’s see how to use PM2 for running the Laravel queue in the background

Check Node installation

Make sure you have node installed on your machine. Type the following command in the terminal to check:

# To check node version use the following command
node -v

# To check NPM version use the following command
npm -v

If both commands work, then go to the next step.

Install PM2

The following command will install PM2 globally.

npm install -g pm2

If you face any issue with permission, then include “sudo” at the beginning of the command. Like:

sudo npm install -g pm2

PM2 app/process configuration

Create a file named pm2-queue-worker.yml in the root directory of your Laravel project. This name can be anything, so set the name as you like; just make sure it has a .yml extension.

Now add the following lines in the file:

apps:
  - name: my-queue-work
    interpreter: php
    script: artisan
    exec_mode: fork
    instances: 1
    args:
      - queue:work
      - --queue=high,medium,low
      - --tries=3
      - --sleep=1

If you prefer to use JavaScript format for configuration, then that can be done too. Follow the documentation from the link – https://pm2.keymetrics.io/docs/usage/pm2-doc-single-page/#javascript-format

Run PM2 process

Use the following command to run your worker process:

pm2 run pm2-queue-worker.yml

And done. Your Laravel worker is running in the background now.

If you want to monitor the process, then use commands from the section below:

PM2 process monitoring

  • To check the list of the processes that PM2 is running, use the following command.
pm2 list

This command will show all the processes running using PM2.

Just notice the 2 columns in the table, “App Name” and “id“, you will need that for checking the logs for a specific App.

  • To check PM2 logs (all logs from all Apps), use the following command.
pm2 log
  • To check PM2 logs for a specific app, use the following command. Any of the following commands can be used.
# If your app name is "my-queue-worker"
pm2 log my-queue-worker

# If your app id is 0
pm2 log 0

Or you can use the following command to monitor:

pm2 monit

Finally, use the following documentation for generating the startup script – https://pm2.keymetrics.io/docs/usage/startup/

Leave a Comment


The reCAPTCHA verification period has expired. Please reload the page.