Theo người đàn ông:
Trình nền cron bắt đầu một lớp con từ thư mục HOME của bạn. Nếu bạn lên lịch để chạy lệnh khi bạn chưa đăng nhập và bạn muốn các lệnh trong tệp .profile của mình chạy, lệnh phải đọc rõ ràng tệp .profile của bạn.
Trình nền cron cung cấp một môi trường mặc định cho mọi shell, xác định HOME, LOGNAME, SHELL (= / usr / bin / sh)
và PATH (= / usr / bin).
Vì vậy, cron daemon không biết php ở đâu và bạn nên chỉ định đường dẫn php đầy đủ bằng tay (ví dụ: tôi không biết đường dẫn PHP thực sự của bạn):
#!/bin/sh
/usr/local/bin/php /home/v/file.php
sh /root/x/some.sh
Một cách khác là lấy nguồn / etc / profile (hoặc .profile / .bashrc) của bạn, ví dụ
* * * * * . /home/v/.bashrc ; sh /home/v/test.sh
Điều này hữu ích nếu .bashrc của bạn đặt các biến môi trường mà bạn cần (ví dụ PATH)
BIÊN TẬP
Một cách đọc thú vị là " Newbie: Intro to cron ", đừng đánh giá thấp bài viết từ tiêu đề (Đây là một bài đọc cho mọi người), thực tế nó được viết hoàn chỉnh và trả lời hoàn hảo cho câu hỏi của bạn:
...
PATH chứa các thư mục sẽ nằm trong đường dẫn tìm kiếm cron, ví dụ: nếu bạn có chương trình 'foo' trong thư mục / usr / cog / bin, có thể đáng để thêm / usr / cog / bin vào đường dẫn, vì nó sẽ ngăn bạn phải sử dụng đường dẫn đầy đủ để 'foo' mỗi khi bạn muốn gọi nó.
...