Tampaknya Apple tidak tertarik dengan penggantian kait logout, karena mereka menutup masalah saya untuk menanyakannya.
Namun, salah satu perbaikan di Yosemite adalah launchd sekarang mengirim sinyal ke skrip shell dengan benar. Artinya, Anda sekarang dapat melakukan tugas log-out seperti:
Berikut ini contoh logout.sh:
#!/bin/sh
onLogout() {
echo 'Logging out' >> ~/Logs/logout.sh.log
exit
}
trap 'onLogout' SIGINT SIGHUP SIGTERM
while true; do
sleep 86400 &
wait $!
done
Ini hanya akan tidur (asynchronous, melakukannya secara sinkron tanpa ampersand tampaknya tidak berfungsi) sampai menerima salah satu sinyal yang terperangkap, pada titik mana ia akan menjalankan onLogout
fungsinya.
Yang perlu Anda lakukan adalah meluncurkan skrip itu menggunakan RunAtLoad
agen peluncuran atau daemon peluncuran dan itu akan berjalan pada saat log-out atau shutdown, meskipun penting untuk diingat bahwa tugas-tugas hanya memiliki waktu terbatas untuk diselesaikan sebelum mereka dibunuh sebagai gantinya , jadi ini tidak boleh digunakan untuk menjalankan apa pun yang membutuhkan waktu lama, atau memerlukan koneksi jaringan yang bisa ditunda dll.
Tentu saja ini tidak ada gunanya bagi siapa pun di Mavericks atau sebelumnya, tetapi di bawah Yosemite ini sekarang tampaknya berfungsi seperti yang diharapkan; jadi saya benar-benar melakukannya dengan benar, launchd
hanya saja tidak mengirimkan sinyal dengan benar :)
CATATAN: Agar ini berfungsi, skrip shell tampaknya perlu dijalankan secara langsung dengan diluncurkan, yaitu - skrip itu seharusnya tidak dipanggil sh
. Jadi jika itu ditempatkan dalam ~/Library/Scripts/foo.sh
argumen program Anda mungkin terlihat seperti:
<key>ProgramArguments</key>
<array>
<string>~/Library/Scripts/foo.sh</string>
<string>bar</string>
</array>
<key>EnableGlobbing</key>
<true/>
line 8: syntax error near unexpected token ;'
(dengan kuburan sebelum semi-kolon)