Tôi mới sử dụng công việc lập lịch biểu với cron và crontab. Tôi đang cố gắng lên lịch thực hiện một nhiệm vụ như thể tôi đã đăng nhập, mở một thiết bị đầu cuối và tự thực hiện nó.crontab PATH và USER
Tuy nhiên, tôi lên kế hoạch một nhiệm vụ để giúp tôi quan sát những gì $ USER và $ PATH một nhiệm vụ theo lịch trình được thực hiện với, và đây là những gì tôi tìm thấy:
$ crontab -l
41 11 * * * echo "USER: $USER" > ~/Desktop/cron_env.log; echo "PATH: $PATH" >> ~/Desktop/cron_env.log
$ cat ~/Desktop/cron_env.log
USER:
PATH: /usr/bin:/bin
Có vẻ như dù $ USER không được thiết lập , và $ PATH là một cái gì đó rất cơ bản và/hoặc mặc định. Ngược lại, đây là những gì tôi thấy khi mở một terminal (đăng nhập) và echo thông tin này giống nhau:
USER: aschirma
PATH: /usr/lib/jvm/java-6-sun/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/pkg/icetools/bin:/pkg/hwtools/bin:/pkg/netscape/bin:/pkg/gnu/bin
sao tôi cần phải làm gì để thực hiện nhiệm vụ crontab của tôi chạy theo cách tôi muốn gì?
OP here. Các tập lệnh được khởi chạy từ cron không kế thừa PATH phù hợp. Trong thực tế, đó là nơi tôi lần đầu tiên bắt đầu chạy vào các vấn đề: một tập lệnh bash được thực hiện từ cron không tìm thấy những thứ trong PATH, bởi vì PATH không chính xác. –
@AdamS Đó là vấn đề, họ kế thừa PATH (và một vài biến khác) được đưa ra bởi cron daemon mà không giống như bạn nhận được từ vỏ đăng nhập của bạn, bạn có thể đặt PATH trong tệp crontab của bạn nếu bạn muốn. – KurzedMetal
Từ manpage: 'Chuỗi giá trị không được phân tích để thay thế môi trường hoặc thay thế biến, do đó các dòng như PATH = $ HOME/bin: $ PATH sẽ không hoạt động như bạn mong đợi.' – blujay