Crontab - Chạy trong thư mục


170

Tôi muốn thiết lập một công việc để chạy hàng ngày trong crontab gốc. Nhưng tôi muốn nó thực thi nó từ một thư mục cụ thể để nó có thể tìm thấy tất cả các tệp mà nó cần, vì ứng dụng có một loạt các đường dẫn tương đối.

Dù sao, tôi có thể bảo crontab chạy từ một thư mục cụ thể không?

Câu trả lời:


318

Tất cả các công việc được thực thi bởi một shell, vì vậy hãy bắt đầu đoạn mã shell đó bằng một lệnh để thay đổi thư mục.

cd /path/to/directory && ./bin/myapp

Liên quan đến việc sử dụng &&thay vì ;: thông thường nó không tạo ra sự khác biệt, nhưng nếu cdlệnh thất bại (ví dụ vì thư mục không tồn tại) với &&ứng dụng không được thực thi, trong khi với ;nó được thực thi (nhưng không phải trong thư mục dự định ).


Thay vì thêm một câu trả lời trùng lặp, hãy để tôi thêm rằng bạn có thể chọn shell nào (nếu bạn cần bash thay vì sh chẳng hạn) bằng cách đặt SHELLtrong crontab của bạn.
Edd Steel

12
+1. mọi giải pháp của câu hỏi liên quan khác là viết lại kịch bản với các đường dẫn tuyệt đối. đây chính xác là những gì tôi cần
Conrad.Dean

2
Vì tò mò, bạn có thể sử dụng dấu chấm phẩy ;thay vì ký hiệu kép &&hoặc điều đó không hiệu quả? Và tại sao?
Joshua Pinter

32
@JoshPinter Thông thường nó không tạo ra sự khác biệt. Nhưng nếu cdlệnh thất bại (ví dụ vì thư mục không tồn tại), với &&, ứng dụng không được thực thi. Với ;, nó được thực thi (nhưng không có trong thư mục dự định).
Gilles 'SO- ngừng trở nên xấu xa'

1
Tôi sẽ làm điều này cho tất cả các công việc định kỳ trong ứng dụng của tôi, bạn đã cứu tôi khỏi việc thay đổi các tệp nguồn của tôi, cảm ơn bạn rất nhiều
Kế toán م
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.