Featured image of post A Lesson Learned from Laradock Cron Job Failures

A Lesson Learned from Laradock Cron Job Failures

Troubleshooting Various Issues on Windows

Debugging Steps

  • The cron jobs in laradock are executed in the workspace container. Check logs using:
docker-compose logs -f workspace

Sample log output:

Jul  2 12:26:59 9b6ec4d18dd1 syslog-ng[12]: syslog-ng starting up; version='3.13.2'
workspace_1 | *** Booting runit daemon...
workspace_1 | *** Runit started as PID 20
workspace_1 | Jul  2 12:27:00 9b6ec4d18dd1 cron[23]: (CRON) INFO (pidfile fd = 3)
...
  • Enter the container:
docker-compose exec workspace bash
  • Test cron job execution without suppressing output:
/usr/bin/php /var/www/artisan schedule:run

Permission Issues

  • Logs in /storage/logs showed permission errors when created by root user. Fix permissions:
chmod -R 0777 storage
  • Access container as laradock user:
docker-compose exec --user=laradock workspace bash

Critical Update (2021-07-02 11:19:56 Friday)

Discovered cron jobs failing due to Windows line ending characters (^M):

  • Log output revealed hidden characters:
workspace_1 | Jul  2 03:20:01 fac0b255876a CRON[350]: (laradock) CMD (/usr/bin/php...2>&1^M)
  • Solution:
    1. Remove CRLF line endings from cron configurations
    2. Rebuild container:
    docker-compose build workspace
    docker-compose stop workspace && docker-compose up -d workspace
    

Multi-Server Deployment Strategy

To prevent duplicate cron job execution:

  1. Remove Laravel scheduler from laradock/workspace/crontab/laradock

  2. Use php-worker container instead

  3. Enable scheduler:

    cp laravel-scheduler.conf.example laravel-scheduler.conf
    docker-compose restart php-worker
    
  4. Verify operation:

docker-compose exec php-worker sh
/etc/supervisor/conf.d # supervisorctl status

Expected output:

laravel-scheduler:laravel-scheduler_00   RUNNING   pid 9, uptime 2:14:33