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 onLogoutfungsinya.
Yang perlu Anda lakukan adalah meluncurkan skrip itu menggunakan RunAtLoadagen 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, launchdhanya 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.shargumen 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)