Saya memiliki daemon launchd ~/Library/LaunchAgents
yang berfungsi dengan baik di Mavericks. Tetapi itu tidak akan mulai dalam beta publik Yosemite. Daemon plist seperti ini (nama pengguna saya darksair
dengan UID 501)
<?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>org.darksair.retrmail</string>
<key>ProgramArguments</key>
<array>
<string>/Users/darksair/bin/retrmail.py</string>
</array>
<key>KeepAlive</key>
<false/>
<key>StartInterval</key>
<integer>300</integer>
<key>LaunchOnlyOnce</key>
<false/>
<key>UserName</key>
<string>darksair</string>
<key>ProcessType</key>
<string>Standard</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
<key>StandardErrorPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
</dict>
</plist>
Pada dasarnya itu seharusnya berjalan ~/bin/retrmail.py
setiap 5 menit.
Saya perhatikan bahwa di Yosemite launchd ditingkatkan ke 2.0, dan launchctl memiliki perintah baru. Saya mencoba
sudo launchctl kickstart user/501/org.darksair.retrmail
dan katanya
Could not find service "org.darksair.retrmail" in domain for uid: 501
Saya juga mencoba sekolah tua
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
dan katanya
/Users/darksair/Library/LaunchAgents/retrmail.plist: Path had bad ownership/permissions
File ini milik saya dan grup staf. Saya mencoba keduanya 644 dan 600 izin dengan kesalahan yang sama.
Jadi, adakah yang tahu cara menjalankan daemon launchd di Yosemite dengan benar?
PEMBARUAN: Sepertinya file agen peluncuran saya harus dimiliki oleh root:wheel
. Setelah saya mengunyah, saya mencoba
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
dan itu tidak mengeluarkan kesalahan. Dan saya pikir deamon saya berjalan dengan baik. Saya akan membiarkan pertanyaan ini terbuka karena saya ingat dokumen launchd dengan jelas menyatakan bahwa file agen peluncuran dapat dimiliki oleh pengguna yang menjalankan daemon.
UPDATE2: Tidak itu tidak berjalan dengan benar. Itu dijalankan hanya sekali, tetapi tidak lagi, seolah-olah itu dibongkar.
UPDATE3: Saya memutakhirkan ke Yosemite public beta 3, dan mengubah agen saya menjadi ini
<?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>org.darksair.retrmail</string>
<key>ProgramArguments</key>
<array>
<string>/Users/darksair/bin/retrmail.py</string>
</array>
<key>StartInterval</key>
<integer>300</integer>
<key>UserName</key>
<string>darksair</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
<key>StandardErrorPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
</dict>
</plist>
Saya memuat kembali agen ini, dan saya pikir sekarang ini berfungsi dengan baik. Saya masih membiarkan pertanyaan ini terbuka karena saya tidak tahu apa yang salah dengan daftar saya sebelumnya.
Kesimpulannya, apa yang saya temukan adalah saya harus mengubah pemilik plist root:wheel
untuk memuatnya.
sumber
Jawaban:
Dari
man launchctl
Perbaiki adalah
sumber
chmod 644
?Anehnya, menggunakan
sudo
adalah masalah Anda. Dengan menggunakansudo
, Anda bukan lagi diri Anda sendiri, jadi Anda bukan pemilik file Anda sendiri. Hapussudo
, ulangi perintah dan harus memuat dengan baik. Maaf atas pendekatan filosofis untuk semuanya.sumber
Menemukan solusinya.
Perintah yang benar dalam hal ini adalah
Dan untuk membongkar,
Tidak tahu mengapa
launchctl load
memerlukan root, tetapi load / unload sudah tidak digunakan lagi.sumber
chmod
&chown
?Berlari ke sini juga, mencoba menggunakan pengguna, bukan root yang dimiliki .plist (seperti yang seharusnya dapat dilakukan)
Saya ssh-ed ke mesin ini dari jarak jauh sementara saya TIDAK masuk di konsol (tanpa kepala) yang tampaknya menjadi masalah saya - setidaknya layanan yang dikelola pengguna membutuhkan pengguna untuk masuk ke layar utama (akhirnya saya melakukan masuk melalui remote-manajemen karena ini adalah mesin tanpa kepala)
IMO, jika Anda ingin ini berjalan bahkan jika Anda tidak secara pribadi ada untuk masuk opsi Anda adalah:
Buat login akun Anda secara otomatis (perhatikan implikasi keamanan, juga tanpa tag UserName seperti yang tercantum dalam salah satu jawaban)
Jadikan file root dimiliki seperti yang tercantum dalam berbagai saran (mengatur agar pengguna kembali ke milik Anda dengan UserName seperti yang sudah Anda miliki)
sumber
Ini ide yang konyol.
Saya hanya mengalami kesalahan yang sama, juga setelah ditingkatkan ke Yosemite. Saya keliru mengira itu berarti kepemilikan / izin buruk pada file .plist, padahal, untuk beberapa alasan biner yang saya rujuk dalam daftar (dalam kasus saya cassandra), telah kehilangan bit yang dapat dieksekusi.
chmod + x'ing memperbaikinya.
Mungkin bukan masalah Anda, tetapi mungkin patut dicoba :)
sumber
Hapus
UserName
kunci dan string.Masalahnya adalah bahwa
UserName
kuncinya hanya dapat digunakan jika proses dimulai oleh root. Itu hanya dapat dimulai sebagai root jika plist dimiliki oleh root. Pada dasarnya, proses ini dimulai oleh root dan kemudian suid'ed untuk pengguna yang ditentukan. Jika Anda ingin proses ini berjalan seperti diri Anda sendiri, letakkan plist di folder ~ / Library / LaunchAgents Anda dan hapus kunci UserName.sumber
Apakah Anda mencoba memuat ulang agen secara manual yang memiliki izin pengguna? Saya tidak sepenuhnya mengerti mengapa semua ini diperlukan, tetapi saya percaya bahwa Anda harus dilampirkan ke domain pengguna Anda (yang tampaknya Anda tidak terikat ketika Anda menjalankan sebagai root). Menggunakan fungsi-fungsi ini untuk memasang kembali bekerja untuk saya.
Anda akan menggunakan ini sebagai berikut:
Bsexec menempatkan Anda kembali ke domain Anda, dan memungkinkan Anda menambahkan tugas sebagai agen peluncuran pengguna.
sumber