Làm cách nào tôi có thể chạy / dừng / khởi chạy lại ứng dụng một cách tự động, lúc khởi động / đăng nhập / vào lúc khác?


42

Làm thế nào để bạn tạo một tập lệnh hoặc ứng dụng để chạy hoặc dừng chạy tự động khi hệ thống được khởi động, người dùng đăng nhập vào một thời điểm cụ thể, khi đĩa được gắn, v.v.?


3
Lingon chỉ là một ứng dụng để tạo các tệp .plist để launchd thân thiện hơn với người dùng. Ngoài ra, ai đó đã tạo một trình khởi chạy plist dựa trên web: plist.spotmac.de
Chealion

Boo! plist.spotmac.de dường như không còn nữa. :-(
docwhat

Câu trả lời:


44

Phương pháp Gui

Nếu bạn muốn một cái gì đó chạy khi người dùng đăng nhập, cách dễ nhất là sử dụng GUI. Bạn có thể

  • Đi đến System Prefs > Accounts > Login Itemsmàn hình và thêm mục ở đó bằng cách
    • nhấp vào +biểu tượng
    • kéo và thả .appvào khung
  • Trong thanh công cụ, hiển thị menu ngữ cảnh cho một ứng dụng, chọn Options, sau đó chọnOpen at Login

Phương thức ra mắt

Nếu bạn muốn khởi chạy một cái gì đó không phải là a .apphoặc bạn muốn có quyền kiểm soát nhiều hơn đối với việc khởi chạy nó, chẳng hạn như:

  • tại một thời điểm nhất định hoặc tại một khoảng thời gian xác định
  • liên tục khởi chạy lại nếu nó gặp sự cố
  • không liên quan đến đăng nhập người dùng
  • như một chức năng của truy cập mạng
  • chỉ chạy khi tiến trình khác đang chạy
  • khi một tập tin được thêm vào một thư mục
  • Vân vân.

sau đó bạn muốn sử dụng các giải pháp kỹ thuật đó là launchd.

Cách dễ nhất để thiết lập launchdtệp cấu hình là sử dụng một công cụ để trợ giúp. Tại thời điểm viết phương pháp phổ biến nhất là Lingon (có phiên bản miễn phí cũ hơn có sẵn từ SourceForge) hoặc công cụ Trang web PList .

Mã hóa tay

Nếu bạn không muốn sử dụng Lingon hoặc Trang web PList và chỉ muốn sử dụng các công cụ thô có sẵn trên hệ thống, bạn có thể tự viết launchd plistbằng tay

Đây là tập lệnh launchd của tôi để chạy một số ứng dụng liên tục sau khi hệ thống khởi động (độc lập với người dùng đăng nhập). Nó nằm trong / System / Library / LaunchAgents / và được gọi là someApp.restart.plist. Nếu nó được chạy dựa trên thông tin đăng nhập của người dùng, nó có thể được lưu trữ trong ~ / Library / LaunchAgents /

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>RunAtLoad</key>  
        <true/>
        <key>KeepAlive</key>
        <true/>
        <key>Label</key>
        <string>SomeApp.restart</string>
        <key>ProgramArguments</key>
        <array>
                <string>/path/to/SomeApp.app/Contents/MacOS/SomeApp</string>
        </array>
        <key>StartCalendarInterval</key>
        <dict>
            <key>Hour</key>
            <integer>5</integer>
            <key>Minute</key>
            <integer>10</integer>
       </dict>
</dict>
</plist>

Tải một lần với

launchctl load ~/Library/LaunchAgents/SomeApp.restart.plist
  • Các RunAtLoadtùy chọn sẽ khởi chạy ứng dụng lần đầu tiên launchctl chạy này.
  • Các KeepAlivetùy chọn sẽ tái khởi động các ứng dụng nếu nó bị treo.
  • Các StartCalendarIntervalsẽ chạy nó tại một thời điểm nhất định. Có lẽ điều này là loại trừ lẫn nhau với hai phần trước, nhưng được đưa vào để hiển thị những gì có thể được thực hiện vớilaunchd
  • Launchctl sẽ chạy này sau khi khởi động lại.

Có rất nhiều tùy chọn bổ sung có thể được tìm thấy bằng cách thử nghiệm với Lingon hoặc bằng cách đọc các trang người đàn ông cho launchctl, launchd.plist, plist, launchd.confvv


Cảm ơn, thực sự hữu ích. Bạn cũng có thể sử dụng launchctl load -w ...để thực hiện thay đổi liên tục. Dựa trên phản hồi của bạn, tôi đã cập nhật tập lệnh cấu hình bộ cung cấp năng lượng OSX
sorin

8

Lingon vẫn hoạt động. Tôi vừa sử dụng nó tuần trước để tạo ra một "nhiệm vụ theo lịch trình". Sau khi tôi tải xuống, tôi phải sử dụng trình cập nhật tự động để có phiên bản mới nhất nhưng nó hoạt động tốt.


1
Lingon hiện cũng đã có mặt trên App Store
user151019

1
Nhưng để tìm phiên bản nguồn mở, miễn phí, bạn cần phải khai thác nó ra khỏi Sourceforge. Phiên bản thương mại mới nhất cũng không hoạt động trên Leopard (10.5). Nhưng 2.1.1 thì có - xem sourceforge.net/projects/lingon/files/Lingon/2.1.1
nealmcb

7

Nếu chỉ cần chạy khi hệ thống được khởi động, chỉ cần sử dụng tab Mục đăng nhập của ngăn tùy chọn Tài khoản của bạn trong Tùy chọn hệ thống.

văn bản thay thế

Nếu đó là tập lệnh, hãy sử dụng AppleScript Editor để lưu tập tin dưới dạng một ứng dụng. Nếu đó không phải là tập lệnh AppleScript, bạn vẫn có thể sử dụng AppleScript để chạy tập lệnh như thế này:

do shell script "your script here"


Huh ? Bạn có chắc chắn về điều đó không ? Nó nói trong giao diện người dùng của ảnh chụp màn hình của bạn "Những mục này sẽ tự động mở khi bạn đăng nhập" - không khác gì khi hệ thống khởi động? Ngoài ra, liên kết của bạn dường như đến 404.
ssc

5

Đừng quên Loginhooks.

Mặc dù chúng chạy bằng root, nhưng bạn phải có khả năng để nó thực thi tập lệnh $ HOME / .loginhook bằng cách sử dụng cái gì đó như thế này:

#!/bin/sh

home=`eval echo ~$user`

if [ -x "$home/.loginhook" ]; then
    logger -t $0 "executing .loginhook of user $user"
    su - $user -c "$home/.loginhook"
fi

Sau đó, chỉ cần thêm bất kỳ lệnh nào bạn muốn vào ~ / .loginhook

Ngoài ra, mặc dù 'launchd' là "cách Mac", crontab vẫn là một tùy chọn hoàn toàn khả thi và dễ dàng chỉnh sửa bằng tay hơn nhiều so với các tệp launchd XML.

Cá nhân tôi đã vui vẻ trả 5 đô la cho Lingon .


Vì vậy, tập lệnh trong khối mã nên được lưu dưới dạng /path/to/script, và sudo defaults write com.apple.loginwindow LoginHook /path/to/script? Và điểm quan trọng trong việc chạy một tập lệnh trong thư mục chính là mỗi người dùng có thể có một tùy chỉnh (hoặc không) ~/.loginhook?
Lri

@Lri - vâng, chính xác. Xin lỗi điều đó không rõ ràng hơn. Mã khối có thể là /usr/local/bin/loginhook.sh và, vì nó được chạy bởi root, nó sẽ tìm $ HOME / .loginhook khi người dùng đăng nhập và chạy nó với tư cách là người dùng đó.
TJ Luoma

4

Chạy một ứng dụng tại một thời điểm nhất định có thể được thực hiện dễ dàng trong iCal, vì tôi vừa tìm ra nhờ vào một diễn đàn khác!

  1. Tạo một sự kiện mới trong iCal cho thời gian bạn muốn ứng dụng mở.
  2. Tại 'Thông báo' chọn 'Mở tệp' - vì vậy, bạn có thể đặt tệp để mở, rõ ràng cũng sẽ mở ứng dụng mặc định cho loại tệp đó.
  3. Để chỉ mở một ứng dụng, thay vì một tệp, hãy thay đổi menu thả xuống 'iCal' thành 'Khác ...' và chọn ứng dụng bạn muốn chạy!

Một điều cần lưu ý là nếu bạn có nhiều máy Mac chia sẻ qua iCloud, sự kiện này cũng sẽ chạy trên các ứng dụng mà bạn có thể muốn hoặc không muốn. Để thực hiện điều này chỉ xảy ra trên một máy Mac, bạn cần tạo sự kiện trong lịch 'Trên máy Mac của tôi' mà bạn có thể làm như sau ...

  1. Ẩn tất cả các iCloud hoặc lịch chung khác trên thanh bên trái bằng cách di chuột qua tên lịch và nhấp vào nút 'ẩn' sẽ xuất hiện.
  2. Bây giờ, nhấp chuột phải (hoặc nhấp vào Tùy chọn nếu bạn là một cretin hoàn chỉnh và vẫn chưa nhận ra rằng bạn có nhiều hơn một ngón tay và có thể thay đổi tùy chọn chuột của bạn để nó hữu ích hơn một chút so với 'cục gạch cretinous mặc định cho trạng thái của cretin' ) và chọn 'Lịch mới'.
  3. Vì tất cả các lịch được chia sẻ đều bị ẩn, lịch mới này sẽ được tạo là 'Trên máy Mac của tôi' và sẽ cục bộ với máy Mac này.

Tôi chỉ mới phát hiện ra điều này một mình, và được ngạc nhiên bởi cả hai mẹo, vì vậy tôi nghĩ rằng tôi sẽ chia sẻ chúng ở đây.

Tôi đã nhận được thông tin từ những người hữu ích ở đây ... cảm ơn mọi người! ...

http://osxdaily.com/2013/04/15/launch-file-app-schediated-date-mac-os-x/

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.