tl; dr: OSX'in yerel işlem başlatıcısını ve yöneticisini kullanın launchd,.
Bunu yapmak için bir launchctlarka plan programı yapın. Senaryonun tüm yönleri üzerinde tam kontrole sahip olacaksınız. Bir kez koşabilir veya bir daemon olarak hayatta kalabilirsiniz. Çoğu durumda, bu yol.
- Apple Dev dokümanlarındaki talimatlara veya aşağıdaki daha fazla ayrıntıya
.plistgöre bir dosya oluşturun .
- Yerleştirmek
~/Library/LaunchAgents
- Giriş yapın (veya üzerinden manuel olarak çalıştırın
launchctl load [filename.plist])
Daha fazla bilgi için launchd, wikipedia makalesi oldukça iyi ve sistemi ve diğer eski sistemlere göre avantajlarını açıklıyor.
İşte oturum açma sırasında bir komut dosyası çalıştırmak için belirli plist dosyası .
OSX El Capitan ve daha yeni sürümler için 2017/09/25 güncellendi ( José Messias Jr'a kredi ):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.loginscript</string>
<key>ProgramArguments</key>
<array><string>/path/to/executable/script.sh</string></array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Değiştir <string>(: bu komutla başvuruda bulunduğu komut çalıştırılabilir olması gerektiğini not istediğiniz komutla Programı anahtarının sonra chmod a+x /path/to/executable/script.shtüm kullanıcılar için olduğundan emin olmak için).
Farklı kaydet ~/Library/LaunchAgents/com.user.loginscript.plist
launchctl load ~/Library/LaunchAgents/com.user.loginscript.plistTest etmek (veya doğrudan test etmek, çalıştırmak launchctl start com.user.loginscript) için çalıştırın ve oturumu kapatın / oturum açın
/var/log/system.logHata mesajlarının kuyruğu .
Anahtar, bunun Kullanıcıya özel bir başlatma girişi olmasıdır, bu nedenle belirli bir kullanıcı için oturum açıldığında çalıştırılacaktır. Sisteme özgü başlatma cinleri (yerleştirilmiş /Library/LaunchDaemons) önyükleme sırasında çalıştırılır.
Bir komut dosyasının tüm kullanıcılar için oturum açmada çalışmasını istiyorsanız, sanırım LoginHook tek seçeneğinizdir ve muhtemelen bunun nedeni de budur.