linux: làm thế nào để chạy một lệnh trong một thư mục nhất định


16

Tôi chỉ đơn giản muốn chạy một lệnh (thực ra là tập lệnh shell) từ một thư mục đã cho dưới dạng công việc định kỳ. Làm thế nào tôi có thể chạy nó để nó được đặt vào một thư mục nhất định mà không cần sử dụng cd.

Câu trả lời:


16

Câu hỏi của bạn làm cho rất ít ý nghĩa. Sử dụng cd. Nếu bạn yêu cầu câu trả lời không sử dụng cdvì bạn đã thử và nó không hoạt động, có khả năng bạn đã không nhập chính xác vào crontab.

Cách đơn giản nhất là viết một tập lệnh shell nhỏ sẽ cd và chạy tác vụ chính của bạn, sau đó ghi lại tập lệnh.


1
Crontab có thể cho tôi đặt nhiều lệnh trong một công việc không? Nếu không tôi sẽ phải harcode cd [path]. Và đường dẫn có thể thay đổi, do đó gây ra các vấn đề triển khai thực sự khó chịu và phân cấp cấu hình là điều tôi đang tránh bằng mọi giá.
Zombie

1
@Zombie: có, bạn có thể đặt nhiều lệnh trong một công việc (ví dụ: tách chúng bằng dấu chấm phẩy hoặc &&), nhưng bạn cũng có thể viết một tập lệnh riêng có chứa tất cả các lệnh và chỉ cần đặt đường dẫn đến tập lệnh theo cron, như Daenyth đề xuất. Tập lệnh của bạn có thể làm một cái gì đó như đọc thư mục từ một tệp cấu hình nếu bạn muốn - vấn đề là, tuy nhiên, bạn muốn lấy tên thư mục vào tập lệnh của mình, không có lý do gì để không sử dụng cd.
David Z

Tôi hiểu rồi. Tôi sẽ muốn sử dụng cd trực tiếp trên crontab vì nếu tôi viết nó trong một tệp, tôi sẽ phải chỉnh sửa nó trong mỗi tệp để tạo cấu hình tinh tế / dễ phá vỡ.
Zombie

3
Và nếu bạn đặt cd vào tệp crontab, bạn sẽ phải chỉnh sửa nó trong mỗi tệp crontab. Tôi không hiểu vấn đề. Có lẽ bạn có thể giải thích những gì bạn đang cố gắng làm đầy đủ hơn.
garyjohn

Và lý do khác để chạy tập lệnh shell từ tệp crontab là để đảm bảo rằng môi trường được đặt chính xác. Môi trường được cung cấp cho một công việc định kỳ thường hầu như không phải là tối thiểu, vì vậy bạn thường cần phải thiết lập lại nó thành một cái gì đó có thể sử dụng nhiều hơn.
Jonathan Leffler

60

Chỉ cần xác định đường dẫn đến kịch bản. Không cần cd:

0 12 * * * /path/to/script args

Nếu tập lệnh của bạn tìm kiếm các tập tin ., thì bạn sẽ phải sử dụng cd:

0 12 * * * cd /some/dir && /path/to/script args


4
&&, như trong câu trả lời @WillSheppard liên kết đến, sẽ tốt hơn ;&&chỉ chạy lệnh tiếp theo nếu lệnh trước đó thành công.
Max Heiber

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.