Kịch bản cron không thực thi trên Mavericks


12

Tôi đã cấu hình tệp crontab của người dùng như sau:

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh

Nhưng nó sẽ không thực thi. Tôi chờ đợi, giống như, 10-15 phút. Tại sao?

Lệnh auto-update.sh chạy dễ dàng nếu được thực hiện thủ công. Làm cách nào tôi có thể phá vỡ chuỗi thực thi và để tập lệnh của tôi chạy từ cron?


1
Bạn đang chạy hệ điều hành nào? Cron không được dùng trên OS X, vì vậy bạn có thể cần phải khởi động trình nền?
bmike

Mới nhất, 10.9.2. Tôi phải làm nó như thế nào? Tôi chỉ muốn một kịch bản để làm việc mỗi giờ, ví dụ. Trong kịch bản trên, tôi đã tuyệt vọng vì nó không hoạt động và đã sửa đổi nó để hoạt động cứ sau 2 phút.
RomaValcer

1
Trình nền cron sẽ được tự động khởi động (bằng cách thay thế, launchd) nếu tồn tại tệp crontab. Xem / System / L Library / LaunchDaemons / com.vix.cron.plist (đặc biệt là KeepAliveQueueDirectoriescác mục).
Gordon Davisson

OK, Keeplive ở đó, nhưng chỉ có đường dẫn được liệt kê là '/ etc / crontab' không tồn tại. Trong QueueDirectories có tệp hiện có trong thư mục bị hạn chế '/ usr / lib / cron / tab'. Khi mở nó bằng su và vim, đó là nhiệm vụ của tôi.
RomaValcer

Câu trả lời:


17

Môi trường mà một công việc định kỳ chạy trong khá khác biệt so với vỏ tương tác; có khả năng kịch bản đang chạy, nhưng không thành công. Một trong những khác biệt lớn nhất là đối với các công việc định kỳ, PATH mặc định chỉ là "/ usr / bin: / bin", vì vậy nếu bạn sử dụng bất kỳ lệnh nào không có trong / usr / bin hoặc / bin, chúng sẽ không được tìm thấy trừ khi tập lệnh của bạn đặt PATH của chính nó hoặc cung cấp các đường dẫn rõ ràng cho các lệnh. Sự khác biệt lớn khác chỉ đơn giản là nó không được kết nối với phiên tương tác, vì vậy nếu nó cố gắng thực hiện bất kỳ điều gì tương tác (đọc từ thiết bị đầu cuối, v.v.) sẽ thất bại. Hãy thử thay đổi mục nhập thành:

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh >>/tmp/auto-update.log 2>&1

... và xem nếu có bất cứ thông tin nào xuất hiện trong nhật ký.


Điều này tốt hơn nỗ lực của tôi - hãy thoải mái kết hợp ý tưởng logger của tôi nếu nó làm cho câu trả lời của bạn tốt hơn.
bmike

Đăng nhập chỉ không xuất hiện.
RomaValcer

@RomaValcer: điều đó thật lạ - điều đó có nghĩa là nó thậm chí còn không được phát hành kịch bản. Tôi sẽ chạy ps -ax | grep [c]ronvà xem nếu nó liệt kê cron daemon (/ usr / sbin / cron) đang chạy. Nếu có, hãy thử kiểm tra logger của bmike. Trong mọi trường hợp, hãy kiểm tra nhật ký (/var/log/system.log và mục "Tất cả tin nhắn" trong tiện ích Bảng điều khiển) và xem liệu có bất cứ điều gì liên quan không.
Gordon Davisson

Vâng, nó ở đó. Nhưng nhật ký không hiển thị bất cứ điều gì bắt đầu vào thời gian dự kiến.
RomaValcer

4

Thật khó để nói, nhưng điều gì sẽ xảy ra nếu bạn thêm một công việc định kỳ thứ hai để thực hiện cứ sau 5 phút hoặc để nó gọi một số công cụ được xây dựng hệ thống ghi nhật ký tin nhắn vào system.log?

0,5,10,15,20 * * * * /usr/bin/logger "cron is working"

Bằng cách đó, bạn sẽ biết rằng cron đang chạy cho người dùng đang đề cập và có thể tập trung vào việc bắt đầu cron hoặc sửa tập lệnh của bạn để nó chạy trong môi trường cron giới hạn. (Bạn có thể nhìn vào đồng hồ treo tường và chọn một vài lần sắp xuất hiện hoặc thậm chí vài phút tiếp theo - ví dụ: chỉnh sửa lúc 12:34 đặt vào 35,36,37,38 trong vài phút để chạy và lưu tệp cron .)


4

Đã được một thời gian bạn hỏi câu hỏi này, nhưng dường như không có giải pháp nào được đưa ra trong chủ đề này.

Tùy thuộc vào cách bạn tạo một crontab người dùng, có thể cần phải thực hiện điều này sau khi chỉnh sửa nó:

crontab ~/.yourcrontabfile

Để xem crontab mới (cũng sau khi sửa đổi nó) đã được kích hoạt chưa, hãy kiểm tra với:

crontab -l

Điều đó không hiệu quả. Crontab -l cho thấy các crons được thiết lập, nhưng nó vẫn không hoạt động.
PKHunter

1

Tôi đã từng gặp vấn đề tương tự. Bạn cần thêm đường dẫn vào tập lệnh bash của mình:

#!/bin/sh
PATH=/usr/local/bin:/usr/local/sbin:~/bin:/usr/bin:/bin:/usr/sbin:/sbin

0

Tôi đã từng gặp vấn đề tương tự. Nó đã biến mất sau khi tôi thêm một dòng mới sau công việc của tôi trong tệp crontab của tôi (Tôi là tổng số crontab n00b, vì vậy tôi không biết hành vi này có được biết đến rộng rãi hay không).

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.