Làm cách nào tôi có thể có được một tập lệnh để chạy mỗi ngày trên Mac OS X?


Câu trả lời:


62

Để tham khảo, cả 3 tùy chọn sẽ hoạt động. Tuy nhiên, tùy chọn iCal có nhiều hạn chế hơn các tùy chọn khác.

(Có GUI để chỉnh sửa cron và launchd như được đề cập trong các câu trả lời khác)

Cron là người thẳng thắn nhất và nổi tiếng và có nhiều hướng dẫn có sẵn. Ghi chú Coles là thêm dòng cuối cùng từ bên dưới vào crontab của bạn (bằng cách chỉnh sửa /etc/crontabhoặc sử dụng crontabtrên dòng lệnh):

MM HH DD MM WKD -- Minutes, Hour, Day, Month, Weekday (eg. Sun, Mon)
MM HH * * * USERNAME /PATH/TO/SCRIPT
00 3 * * * chealion /myscript.sh "Runs at 03:00 every day"

Trong Mac OS X, cronthực tế đã được thay thế bởi launchdnhưng launchdtương thích ngược với cronnghĩa là bạn vẫn có thể sử dụng cronnhưng thực tế nó launchdđang làm tất cả công việc.

Nếu bạn muốn sử dụng, launchdbạn cũng muốn xem các câu hỏi khác ở đây trên Super User: (ví dụ: Làm cách nào để tôi chạy lệnh launchd với quyền root? ) Như nơi bạn muốn lưu tệp cấu hình của mình (tệp plist) vì khi nó chạy tùy thuộc vào thư mục nào được lưu trữ và cách tải (ví dụ: bạn có sử dụng sudo hay không) - tương tự như cron.

Một mẫu chạy plist hàng ngày (chắc chắn rằng tệp và nhãn giống nhau - trừ đi phần chính cho nhãn) theo sau - tập lệnh này được chạy hàng ngày vào lúc 3 phút trước nửa đêm:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>local.IDENTIFIER_HERE.SOMETHING</string>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <false/>
    <key>UserName</key>
    <string>USERNAME HERE</string>
    <key>Program</key>
    <string>/PATH/TO/SCRIPT</string>
    <key>ProgramArguments</key>
    <array>
        <string>Argument_1</string>
        <string>Argument_2</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>00</integer>
        <key>Minute</key>
        <integer>03</integer>
    </dict>
</dict>
</plist>

Cũng đáng lưu ý rằng các tác vụ khởi động nếu chúng được lên lịch khi máy tính ngủ hoặc tắt, chúng sẽ chạy khi máy tính khả dụng trở lại (bật hoặc đánh thức nó) - mặc dù chỉ một lần cho dù có bao nhiêu ngày đã. Chỉnh sửa: Tôi vừa ở một tài liệu của Apple nói rằng nếu máy bị tắt thì bạn sẽ mất bất kỳ sự kiện khởi chạy nào trong thời gian đó, (tập lệnh của bạn sẽ không khởi chạy khi khởi động), (ngủ không khởi chạy tập lệnh khi thức dậy)


Một tùy chọn khác là sử dụng " at " (kiểm tra trang thủ công với "man at"). Kịch bản có thể tự lên lịch lại với: vd:

echo "sh $0 $@" | at `date +%H:%M` tomorrow

(sử dụng "+ 10 phút" thay vì "ngày mai" để chạy nó cứ sau 10 phút; để dừng lập lịch, chỉ cần thực hiện "at -l" để liệt kê các id công việc đã lên lịch và sau đó "at -r id " để xóa công việc)

Trước tiên, bạn có thể phải bắt đầu trình nền tương ứng (atrun) bằng (xem https://superuser.com/a/43680 ):

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

Ưu điểm: khắc phục nhanh, không cần truy cập sudo / root, dễ thực hiện các mẫu lịch biểu phức tạp Nhược điểm: không phải là phương pháp lập lịch chuẩn cho OS X (được khởi chạy)


8
Thưa ông, đối với tập tin cấu hình launchd ví dụ của bạn, tôi có thể hôn bạn. Nhưng tôi không biết.
Paul D. Chờ

5
launchdlà cách để đi theo OS X.
zneak

Vâng, đó là ấn tượng của tôi. Nghe có vẻ như có một số vấn đề trở lại trong Tiger, nhưng Apple dường như đã mài giũa nó kể từ đó.
Paul D. Chờ

Trên Os 10.7.4 không có tệp / etc / crontab. ): Vì vậy, tôi đã làm 'which crontab' và nó đã cho tôi / usr / bin / crontab nhưng đó là một tập tin bị cắt xén.
Hermann Ingjaldsson

@HermannIngjaldsson / usr / bin / crontab là một chương trình; nếu bạn chạy nó trong Terminal cùng crontab -e, nó sẽ đưa bạn vào trình soạn thảo văn bản dựa trên thiết bị đầu cuối trên một tệp sẽ trở thành crontab cá nhân của bạn khi bạn lưu nó.
Mark Reed

8

LaunchControl là một GUI khác cho launchd / launchctl. Mặc dù các lựa chọn thay thế được đề cập bởi những người khác hoàn toàn có khả năng khởi chạy một tập lệnh hàng ngày, nhưng với LaunchControl, bạn có thể định cấu hình lịch biểu phức tạp (như "một lần mỗi ngày trong tuần, vào cuối tuần mỗi giờ trong khoảng từ 2 giờ chiều đến 8 giờ tối"). Ngoài ra, nó là (AFAIK) công cụ duy nhất thực sự xác nhận công việc. Nếu một công việc không hoạt động như mong đợi, nó sẽ cho bạn thấy lý do tại sao.

Miễn phí thử miễn là bạn muốn.


3
Mặc dù nó là miễn phí để thử / sử dụng, nhà phát triển muốn bạn trả tiền cho giấy phép. site.fastspring.com/somazone/product/shop
Kent

1
Chắc chắn rồi. Lý do tại sao tôi đăng câu trả lời này ở nơi đầu tiên là để hỗ trợ nhà phát triển.
Mark Hall

5

CronniX là một giao diện GUI đẹp để lên lịch cho các công việc cron trên mac ... Khá tốt nếu bạn không muốn đi sâu vào tài liệu cron.


2
  • Đối với iCal bạn có thể muốn đọc bài viết này .
  • Bạn nên tìm đủ hướng dẫn cronnếu bạn google cho nó.

Nó phụ thuộc vào những gì bạn muốn: tập lệnh iCal sẽ chỉ được thực thi nếu bạn đã đăng nhập, cronthực thi tập lệnh mà không cần đăng nhập. Tôi không biết nếu iCal thực thi tập lệnh nếu Mac được bật vào thời điểm tập lệnh nên đã bị xử tử. cronđang làm điều này



2

Đây là một tiện ích đơn giản, miễn phí để tạo XML nguyên bản:

http://www.gieson.com/L Library / project / utilities / launcha /

Với ứng dụng này, không cần cài đặt chương trình, chỉ cần lưu kết quả vào thư mục Thư viện / LaunchAgents của bạn.


Cảnh báo: nếu bạn sử dụng công cụ này, hãy đảm bảo rằng nó RunAtStartđược đặt thành false (trừ khi bạn muốn nó đúng). Tôi đã dành một giờ để tìm hiểu lý do tại sao Finder của tôi sẽ đóng băng và ngăn máy tính để bàn tải khi khởi động. Vô hiệu hóa RunAtStartkhông can thiệp vào lịch trình cố định.
Andrea Lazzarotto

1

Tôi luôn sử dụng Lingon cho việc này, nhưng có vẻ như nó không phát triển. Bạn có thể dùng thử Crontooie , nhưng tôi chưa bao giờ sử dụng nó. Hoặc chỉ cần chỉnh sửa tệp crontab trong thiết bị đầu cuối.


Dường như với tôi Lingon đang được phát triển tích cực ; phiên bản 3 hiện tại có sẵn trong AppStore cùng với phiên bản trước 2. Cả hai đều có giá vài đô la và nhận được nhiều ý kiến ​​trái chiều. Cá nhân tôi sử dụng Lingon 3 với một số thành công, nhưng sẽ không đề xuất nó cho mục đích trong bài viết này hơn các công cụ khác được đề cập trong các câu trả lời khác (cron, at, v.v.).
ssc

Lần trước tôi sử dụng Lingon là hơn 2 năm trước. Vào thời điểm đó, nó hoạt động tốt với tôi, nhưng tôi đã không sử dụng những câu thơ gần đây. Quá tệ, nó không đáng tin cậy như trước đây.
Josh


0
sp@mactop ~ $ crontab -l
*/5 * * * * /usr/local/bin/cinco.sh
sp@mactop ~ $ cat /usr/local/bin/cinco.sh
#!/bin/sh
....cut....
sp@mactop ~ $ 

... bất cứ dòng lệnh nào bạn ném vào cho ".... cắt ...." sẽ được chạy cứ sau năm phút.

30 năm tiến bộ và 'cron' vẫn là lịch trình yêu thích của tôi.

-C


0

Nếu một sự kiện lịch đáp ứng nhu cầu của bạn, ứng dụng Automator tích hợp cũng cho phép bạn tạo Báo thức lịch được kích hoạt bởi các sự kiện lịch. Bạn có thể sử dụng một số hành động dựa trên giao diện người dùng tích hợp để làm những gì bạn muốn hoặc bạn cũng có thể chạy nó một số ứng dụng hoặc tùy chỉnh AppleScript, JavaScript hoặc shell script.

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.