[筆記] 使用其他 User 執行 Cron Job 腳本
以 Laravel 的 php artisan schedule
為例,
如果希望是特定使用者執行的話可以這樣做:
Crontab 部分
在 crontab 中用 su
指定使用者(例如 www),並執行 shell 腳本。
例如在 crontab -e
中:
* * * * * su www -c "/usr/local/bin/laravel-scheduler.sh"
Shell Script 部分
使用 crontab 執行 shell script 時,預設不會載入 .bashrc。
因為我們有使用 PHPBrew 管理多版本的 PHP,
需要手動透過 source
載入環境變數,
才能執行正確的 PHP 版本。
例如在 /usr/local/bin/laravel-scheduler.sh
中:
#!/bin/bash
source ~/.bashrc # 載入 www 的 bash 環境變數
php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
其實…
網路上找到一些其他的解決方案,我還沒實際嘗試,有錯誤的話煩請告訴我。
也可以都寫在 Crontab
這樣就不用寫 shell script。
例如在 crontab -e
中:
* * * * * su www -c "source /home/www/.bashrc; <command>"
也可以直接指定 Shell 和環境變數
但這應該會影響到整個 crontab。
例如在 crontab -e
中:
SHELL=/bin/bash
BASH_ENV="/home/www/.bashrc"
* * * * * su www -c "<command>"