Saya tidak dapat menjadwalkan peluncuran berkala dengan launchctl
/ launchd
di OS X (Leopard). Pada dasarnya, saya tidak dapat menemukan daftar petunjuk langkah demi langkah di web dan pendekatan intuitif tidak berfungsi.
The sync.plist
File:
<?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>net.madrat.utils.sync</string>
<key>Program</key>
<string>rsync</string>
<key>ProgramArguments</key>
<array>
<string>-ar</string>
<string>/path/to/folder/</string>
<string>/path/to/backup/</string>
</array>
<key>StartInterval</key>
<integer>7200</integer>
</dict>
</plist>
Saya telah menempatkan skrip ini di dalam path ~/Library/LaunchAgents
.
Selanjutnya, saya sudah mendaftarkan skrip menggunakan
launchctl load ~/Library/LaunchAgents/sync.plist
Akhirnya, untuk menguji apakah itu berhasil, saya memulai pekerjaan:
launchctl start net.madrat.utils.sync
- Tidak ada yang terjadi. Menjalankan rsync
perintah di terminal secara manual menghasilkan hasil yang diharapkan.
Saya cukup yakin bahwa pekerjaan itu terdaftar dengan benar karena jika saya mencoba memulai pekerjaan yang tidak ada, saya mendapatkan pesan kesalahan (yang saya tidak dapatkan di perintah di atas).
Apa kesalahan yang telah aku perbuat?
launchctl list
memang menampilkan 1, tetapi hanya setelah saya mulai menggunakan agen secara manuallaunchctl start
.Jawaban panjang:
Sulit untuk bekerja dengan launchd tanpa memahami beberapa prinsip dasar. Jadi sepertinya Anda tidak akan menemukan instruksi langkah-demi-langkah, ia memiliki begitu banyak kemampuan. Langkah yang baik adalah menuju panduan memulai di ADC: http://developer.apple.com/macosx/launchd.html
Anda juga dapat membaca halaman manual untuk
launchd
,launchctl
dan sintaks file .plistlaunchd.plist
,.Ada kesalahpahaman yang sering terjadi di mana menempatkan agen atau deamon Anda, jadi izinkan saya mendorong beberapa info tentang hal itu di sini:
Jawaban singkat:
Nama file plist Anda mungkin salah, tidak dapat diuji sekarang, tetapi saya akan mengaturnya
net.madrat.utils.sync.plist
. Mungkin berguna juga untuk pertama kaliunload
deamon Anda sebelum memuatnya jika Anda mengedit file.sumber
launchd bash
untuk debugging - tetapi ini tidak berfungsi pada Leopard (launchd
tidak dapat diluncurkan secara langsung).Saya tidak dapat menemukan dokumentasi bahwa ini sebenarnya perilaku standar, tetapi tampaknya launchd membutuhkan path absolut dalam file plist. Jadi coba
/usr/bin/rsync
saja. Bekerja untukku!sumber
coba ini, skrip saya berfungsi tanpa menggunakan bagian program, cukup args program ...
menggantikan
dengan
sumber
coba tambahkan kunci ini ke file plist Anda
sumber
Anda memiliki satu hal yang salah dalam file .plist Anda, dan satu hal yang cerdik (masing-masing poin ini telah disentuh dalam jawaban sebelumnya; Saya membawa mereka bersama di sini).
Anda sebaiknya menulis:
Argumen pertama dalam
ProgramArguments
array adalah program yang akan dieksekusi - Anda telah menghilangkan ini. JikaProgram
kunci dihilangkan, maka default ke argumen pertama dariProgramArguments
; mungkin bijaksana untuk menentukan ini hanya sekali.Karena Anda menghilangkan argumen pertama ini, .plist Anda akan memanggil rsync (dengan disebutkan namanya
Program
), tetapi 'argumen pertama' rsync seharusnya/path/to/folder
, dan bukan-ar
(program yang sedang berjalan akan terlihat secara singkat dalamps
output, sebelum keluar dengan kesalahan, tetapi dinamai-ar
, yang merupakan isi dari argumen nol).Anda tidak harus memasukkan jalan menuju
rsync
, tetapi dalam konteks semacam ini, mungkin lebih bijaksana untuk melakukannya, untuk menghindari keharusan bergantung pada pengaturanPATH
yang tepat.Dokumentasi untuk ini ada di
launchd.plist(5)
. Perhatikan bahwa halaman manual menekankan bahwa nilaiProgramArguments
kunci diteruskan keexecvp(3)
. Ini adalah halamanexecvp
manual yang menjelaskan tentang pencarian PATH.sumber