Yêu cầu thg 11 16, 2020 12:27 SA 204 1 1
  • 204 1 1
+1

Nên thiết lập cronjob dưới quyền của user nào khi setup shedule trong Laravel

Chia sẻ
  • 204 1 1

Chào mọi người.
E đang tìm hiểu chức năng schedule trong laravel.
Như hướng dẫn thì phải setup 1 cronjob.
* * * * * php /usr/share/nginx/html/laravelProject/artisan schedule:run
Nhưng em k biết là nên setup cronjob trên với quyền user nào.
E có thử setup với quyền root thì sảy ra 1 số vấn đề như:
Sau khoảng N ngày thì file laravel.log của laravel lại bị xóa đi.
Nên nếu lúc đó mà schedule của em chạy, có log ra cái gì đó thì file laravel.log sẽ đc tạo lại dưới quyền root.
File do root sỡ hữu nên ở các tiến trình khác sẽ ko ghi đc log vì bị permission.

Rất mong nhận được hỗ trợ của mọi người ạ.

1 CÂU TRẢ LỜI


Đã trả lời thg 11 16, 2020 2:09 SA
Đã được chấp nhận
+3

bạn nên setup user chạy cronjob bằng user mà own folder app laravel, 1 cách để kiểm tra đó là, bạn cd vào folder app laravel, check quyền trong đó:

ls -l

---->>>
drwxr-xr-x   13 maitrungduc  staff     416  3 Aug 21:52 app
-rwxr-xr-x    1 maitrungduc  staff    1686  3 Aug 21:52 artisan
drwxr-xr-x    4 maitrungduc  staff     128  1 Aug 12:43 bootstrap
-rw-r--r--    1 maitrungduc  staff    1601  3 Aug 21:52 composer.json
-rw-r--r--    1 maitrungduc  staff  189309  4 Nov 10:08 composer.lock
......

Bạn thấy in ra user nào thì bạn chạy bằng user đó, như ở trên user của mình là maitrungduc, sau đó bạn setup cronjob bằng user đó thì sẽ ko gặp lỗi permission, vì khi đó log tạo ra sẽ có quyền đúng bằng maitrungduc. Và để setup cronjob cho non-root user trên Ubuntu thì bạn làm như sau:

crontab -u maitrungduc -e
Chia sẻ
Avatar Ngân Kim @ngankim
thg 11 16, 2020 2:16 SA

@maitrungduc1410
Cảm ơn bạn đã trả lời. Cho mình hỏi thêm là own của folder mình đang set là nginx.
Thì mình cần phải switch user sang user nginx rồi mới đăng ký cronjob đúng ko nhỉ.
Và có nên set user nginx là own của folder app laravel ko nhỉ.
Cảm ơn bạn rất nhiều.

Avatar Mai Trung Đức @maitrungduc1410
thg 11 16, 2020 2:21 SA

@ngankim

Bạn không cần switch sang nginx nhé, bạn dùng user root và chạy command sau là được:

crontab -u nginx -e

Còn việc có nên chọn user nginx để own folder app laravel hay ko thì hoàn toàn tuỳ vào bạn, ở đây mình thấy dùng user nginx ko có vấn đề gì cả. Theo mình nghĩ lí do bạn chọn nginx vì bạn đang deploy với nginx và như vậy thì nginx mới có quyền đọc và ghi. Vậy thì cứ để nginx đi 😃.

Nếu somehow bạn vẫn muốn chuyển owner của folder app thành user khác (user X) thì bạn nên đảm bảo rằng nginx vẫn có thể đọc/ghi vào folder app của bạn là đc (cho X và nginx trong cùng 1 group)

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí