Bagaimana saya menjalankan / menghentikan / meluncurkan ulang aplikasi secara otomatis, saat boot / login / lain waktu?


42

Bagaimana Anda membuat skrip atau aplikasi untuk dijalankan atau berhenti berjalan secara otomatis ketika sistem di-boot, pengguna masuk, pada waktu tertentu, ketika disk terpasang, dll?


3
Lingon hanyalah aplikasi untuk membuat file .plist agar launchd lebih ramah pengguna. Juga seseorang membuat pembuat peluncuran launchd berbasis web: plist.spotmac.de
Chealion

Boo! plist.spotmac.de tampaknya hilang. :-(
docwhat

Jawaban:


44

Metode Gui

Jika Anda ingin sesuatu dijalankan saat pengguna masuk, cara termudah adalah menggunakan GUI. Kamu bisa

  • Pergi ke System Prefs > Accounts > Login Itemslayar, dan tambahkan item di sana
    • mengklik +simbol
    • menyeret dan menjatuhkannya .appke panel
  • Di dok, buka menu konteks untuk aplikasi, pilih Options, lalu pilihOpen at Login

Metode launchd

Jika Anda ingin meluncurkan sesuatu yang bukan .app, atau Anda ingin memiliki kontrol lebih besar atas peluncurannya, seperti:

  • pada waktu tertentu atau pada interval yang ditentukan
  • terus meluncurkan kembali jika crash
  • tidak terkait dengan login pengguna
  • sebagai fungsi dari akses jaringan
  • hanya berjalan ketika proses lain sedang berjalan
  • ketika file ditambahkan ke folder
  • dll.

maka Anda ingin menggunakan solusi teknis itu launchd.

Cara termudah untuk mengatur launchdfile konfigurasi adalah dengan menggunakan alat untuk membantu. Pada saat penulisan metode yang paling populer adalah Lingon (yang memiliki versi gratis lebih lama tersedia dari SourceForge), atau alat Situs Web PList .

Kode Tangan

Jika Anda tidak ingin menggunakan Lingon atau Situs Web PList dan hanya ingin menggunakan alat mentah yang tersedia di sistem, Anda dapat menulis sendiri launchd plistdengan tangan

Inilah skrip launchd saya untuk menjalankan SomeApp terus menerus setelah sistem melakukan booting (terlepas dari pengguna yang masuk). Itu ada di / System / Library / LaunchAgents / dan disebut SomeApp.restart.plist. Jika dijalankan berdasarkan login pengguna, itu bisa disimpan di ~ / 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>

Muat sekali dengan

launchctl load ~/Library/LaunchAgents/SomeApp.restart.plist
  • The RunAtLoadpilihan akan meluncurkan aplikasi waktu launchctl pertama berjalan ini.
  • The KeepAlivepilihan akan kembali meluncurkan aplikasi jika crash.
  • The StartCalendarIntervalakan menjalankannya pada waktu tertentu. Agaknya ini saling eksklusif dengan dua sebelumnya, tetapi dimasukkan untuk menunjukkan apa yang bisa dilakukan denganlaunchd
  • Launchctl akan menjalankan ini setelah reboot.

Ada banyak opsi tambahan yang dapat ditemukan dengan melakukan percobaan dengan Lingon atau dengan membaca halaman manual untuk launchctl, launchd.plist, plist, launchd.conf, dll


Terima kasih, sangat berguna. Anda juga dapat menggunakan launchctl load -w ...untuk membuat perubahan tetap ada. Berdasarkan tanggapan Anda, saya memperbarui skrip konfigurator
poweruser

8

Lingon masih bekerja. Saya hanya menggunakannya minggu lalu untuk membuat "tugas terjadwal". Setelah saya mengunduhnya, saya harus menggunakan pembaruan otomatis untuk mendapatkan versi terbaru tetapi berfungsi dengan baik.


1
Lingon juga sekarang ada di App Store
user151019

1
Tetapi untuk menemukan versi open source yang gratis, Anda perlu menggalinya dari Sourceforge. Versi komersial terbaru juga tidak berfungsi di Leopard (10.5). Tetapi 2.1.1 tidak - lihat sourceforge.net/projects/lingon/files/Lingon/2.1.1
nealmcb

7

Jika hanya perlu dijalankan ketika sistem di-boot, cukup gunakan tab Item Masuk dari panel preferensi Akun Anda di preferensi Sistem.

teks alternatif

Jika ini skrip, gunakan Editor AppleScript untuk menyimpannya sebagai aplikasi. Jika bukan skrip AppleScript, Anda masih bisa menggunakan AppleScript untuk menjalankan skrip seperti ini:

do shell script "your script here"


Hah? Apa kamu yakin akan hal itu ? Dikatakan di UI tangkapan layar Anda "Barang-barang ini akan terbuka secara otomatis ketika Anda masuk" - bukankah itu berbeda dari ketika sistem melakukan boot? Juga, tautan Anda tampaknya ke 404.
ssc

5

Jangan lupa loginhooks.

Meskipun mereka berjalan sebagai root, Anda harus dapat menjalankannya $ script / .loginhook menggunakan sesuatu seperti ini:

#!/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

Kemudian tambahkan saja perintah apa pun yang Anda inginkan ke ~ / .loginhook

Juga, meskipun 'launchd' adalah "cara Mac" crontab masih merupakan opsi yang sangat layak, dan jauh lebih mudah untuk diedit dengan tangan daripada file XML launchd.

Secara pribadi, saya dengan senang hati membayar $ 5 untuk Lingon .


Jadi skrip dalam blok kode harus disimpan sebagai /path/to/script, dan sudo defaults write com.apple.loginwindow LoginHook /path/to/script? Dan intinya dalam menjalankan skrip di direktori home adalah bahwa setiap pengguna dapat memiliki custom (atau tidak) ~/.loginhook?
Lri

@Lri - ya, tepatnya. Maaf itu tidak jelas. Kode blok bisa berupa /usr/local/bin/loginhook.sh dan, karena dijalankan oleh root, ia akan mencari $ HOME / .loginhook ketika pengguna masuk, dan menjalankannya sebagai pengguna itu.
TJ Luoma

4

Menjalankan aplikasi pada waktu tertentu dapat dilakukan dengan mudah di iCal, karena saya baru tahu berkat forum lain!

  1. Buat acara baru di iCal untuk saat Anda ingin aplikasi dibuka.
  2. Di 'Lansiran' pilih 'Buka File' - jadi, Anda dapat mengatur file untuk dibuka, yang tentunya juga akan membuka aplikasi default untuk jenis file itu.
  3. Untuk hanya membuka aplikasi, daripada file, ubah dropdown 'iCal' ke 'Other ...' dan pilih aplikasi yang ingin Anda jalankan!

Satu hal yang perlu diperhatikan adalah bahwa jika Anda memiliki banyak hal berbagi Mac di iCloud, acara ini juga akan berjalan di aplikasi tersebut, yang mungkin atau mungkin tidak Anda inginkan. Untuk membuat ini hanya terjadi pada satu Mac, Anda harus membuat acara dalam kalender 'On My Mac' yang dapat Anda lakukan sebagai berikut ...

  1. Sembunyikan semua kalender iCloud atau berbagi lainnya di bilah kiri dengan mengarahkan kursor ke nama kalender dan mengklik tombol 'sembunyikan' yang akan muncul.
  2. Sekarang klik kanan (atau klik Opsi jika Anda seorang kretin yang lengkap dan masih belum menyadari bahwa Anda memiliki lebih dari satu jari dan dapat mengubah preferensi mouse Anda sehingga itu sedikit lebih berguna daripada keadaan 'batu bata rahasia untuk kretin' standarnya) ) dan pilih 'Kalender Baru'.
  3. Karena semua kalender bersama disembunyikan, kalender baru ini akan dibuat sebagai 'Di Mac Saya' dan akan bersifat lokal untuk Mac ini.

Saya baru saja menemukan ini sendiri, dan terkejut dengan kedua tip itu, jadi saya pikir saya akan membagikannya di sini.

Saya mendapat info dari orang-orang yang membantu di sini ... jadi terima kasih banyak! ...

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.