Menjalankan skrip melalui launchd tanpa permintaan yang mengganggu

2

Saya memiliki sebuah apel yang memeriksa baterai macbook saya dan memaksa hibernasi ketika mencapai tingkat tertentu, setelah menampilkan hitungan mundur 60 detik.

Saya telah berhasil mengaturnya agar berjalan di latar belakang melalui launchd, setiap 30 detik, sebagai skrip tetapi ini menyebabkan ikon memantul yang mengganggu di dok.

Jadi, saya menyimpan skrip sebagai aplikasi dan sekarang ikon dock tidak lagi memantul tetapi jika saya berada di aplikasi terminal (misalnya) dan kebetulan saya menekan CONTROL seperti yang diluncurkan di latar belakang, saya menjadi takut " Tekan Jalankan untuk menjalankan skrip ini, atau Berhenti untuk keluar dari kotak dialog ". Dan ya saya telah memastikan bahwa ketika saya menyimpannya opsi "Layar Startup" TIDAK dipilih.

dialog

Dialog ini muncul di belakang semua jendela lain sehingga saya tidak tahu bahwa itu telah terjadi dan aplikasi / skrip saya macet pada saat ini.

Adakah saran cara mengatasi ini agar saya dapat menjalankan skrip saya tanpa dialog yang mengganggu atau ikon yang terpental?

Terima kasih.

EDIT: Satu ide yang muncul di pikiran adalah menggunakan opsi ExitTimeOut dalam file plist. Halaman manual mengatakan:

ExitTimeOut <integer>
    The amount of time launchd waits before sending a SIGKILL signal. The default value is 20 seconds. The
    value zero is interpreted as infinity.

Jadi saya menambahkannya seperti ini:

<key>ServiceDescription</key>
    <string>Battery Monitor</string>
<key>StartInterval</key>
    <integer>30</integer>
<key>ExitTimeOut</key>
    <integer>90</integer>

kemudian melakukan unload / memuat file .plist. Sayangnya itu tidak berfungsi. Apakah saya salah memahami opsi ini?

Vic
sumber
Apakah skrip Anda rahasia? jika tidak mempublikasikannya maka bisa ditinjau.
Buscar웃
tidak semuanya. Ini dia pastebin.com/jNAfCyjg
Vic
Baru saja mencoba opsi ExitTimeOut. Tidak berhasil Lihat EDIT untuk detailnya
Vic

Jawaban:

0

Konversikan ke Shell Script dan Pair AppleScript

Ubah cek Anda untuk status baterai menjadi skrip shell. Script shell kemudian dapat dijalankan secara teratur melalui a launchd tiket kerja tanpa menghadirkan antarmuka pengguna apa pun.

Ketika kondisi terpenuhi, skrip shell Anda dapat meluncurkan AppleScript untuk berinteraksi dengan pengguna.

Ini mengasumsikan Anda menggunakan ~/Library/LaunchAgent pendekatan untuk tiket pekerjaan launchd. Pekerjaan peluncuran komputer secara luas tidak akan dapat meluncurkan komponen AppleScript di sesi pengguna yang sesuai.

Atau, Anda bisa menggunakan alat pihak ketiga untuk pemicu pada acara baterai , seperti Manajer Daya ; ini akan menghindari polling baterai Anda dan meningkatkan kinerja baterai Anda.

Graham Miln
sumber
Itu ide yang bagus. Saya akan mencobanya, thx. Apakah Anda yakin polling baterai mempengaruhi kinerjanya?
Vic
Menjalankan skrip setiap 30 detik akan menambah beban ke CPU Anda dan dengan demikian mempengaruhi kinerja baterai Anda. Idealnya Anda ingin menghubungkan ke sistem baterai dan menunggu untuk menyiarkan pembaruan sebagai peristiwa; cari di sekitar "polling versus acara" untuk wawasan lebih lanjut tentang topik pengembangan ini.
Graham Miln
Terima kasih, saya akan memeriksanya. Jika ada yang tertarik dengan versi bash dari skrip itu dapat ditemukan di sini pastebin.com/1n3QvbEz . Saya menerima ini sebagai jawabannya.
Vic
Saya buruk. Saya baru menyadari bahwa skrip tersebut melewatkan baris yang memeriksa% saat ini dengan min. Skrip yang diperbaiki dapat ditemukan di sini: pastebin.com/QhcT3FGg
Vic