laravel scheduler 에서 env-variable 적용 안되는 문제 해결하기

Updated on

아~ 대부분 docker 에서 supervisord 로 해서, cron 서비스를 돌리는데.

이 cron 서비스가 돌아가는 곳에서는 제대로된 env 주입이 안된다.

사용자가 달라서 환경변수가 다르기 때문이라고 하는데, 이 문제를 해결하려면 아래와 같이 작성하면 된다.

[supervisord]
nodaemon=true

[program:cron]
command=/bin/bash -c "printenv > /etc/environment && /usr/sbin/cron -f"
autostart=true
autorestart=true
user=root
redirect_stderr=true
stdout_events_enabled=true
stderr_events_enabled=true

stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
command=/bin/bash -c "printenv > /etc/environment && /usr/sbin/cron -f"

이 부분이 핵심인데, /etc/environment 에 env 환경변수를 저장하는 것이다. 그러면, cron 서비스가 돌때에도 정상적으로 env 환경변수를 사용할 수 있게 된다.

https://github.com/laravel/framework/issues/46956