Pada Fedora 17, saya memasukkan file /etc/cron.daily
dengan konten berikut:
cd /
su dstahlke /home/dstahlke/bin/anacron-daily.sh
exit 0
Untuk beberapa alasan, saya mendapatkan email setiap hari yang baru saja dikatakan
/etc/cron.daily/dstahlke-daily:
...killed.
Saya mencoba dengan dan tanpa exit 0
baris di atas (saya perhatikan bahwa beberapa skrip sistem memiliki itu dan yang lainnya tidak, saya tidak yakin dengan tujuannya). Menjalankan /etc/cron.daily/dstahlke-daily
dari baris perintah sebagai root tidak menghasilkan ...killed
pesan. Selain pesan, semuanya tampaknya berfungsi dengan baik. Menempatkan set -x
dalam skrip di atas, serta dalam /home/dstahlke/bin/anacron-daily.sh
skrip menunjukkan bahwa ...killed
pesan terjadi tepat setelah skrip terakhir berakhir (atau mungkin tepat setelah perintah su selesai).
Apa yang menyebabkan ...killed
pesan?
Atau, adakah cara yang lebih dapat diterima untuk membuat anacron menjalankan skrip pengguna setiap hari? Saya pikir menempatkan ini /etc/cron.daily
akan membantu sistem mengoordinasikan semua tugas sehari-hari daripada berpotensi menjalankan tugas saya bersamaan dengan tugas-tugas sistem.
Jawaban:
Saya melakukan penyelidikan lebih lanjut, dan menemukan bahwa
...killed
memang dicetak olehsu
program, meskipun hasil cetak tidak berasal dari proyek coreutils hulu, tetapi diperkenalkan oleh coreutils-8.5-pam.patch dalam rpm sumber. Ada beberapa sejarah tentang asal-usul untuk menambahkan ini di bugzilla ( 622700 , 597928 dan 240117 ).Bagian yang relevan dari kode tersebut adalah
...
Jadi dalam beberapa cara (baik secara langsung / tidak langsung terkait dengan cleanup_pam atau tidak terkait) proses induk menerima SIGTERM antara tes kedua terakhir dan terakhir jika, dan dengan demikian hanya mencetak
...killed
pesan yang jelas seharusnya merupakan kelanjutan dari fprintf di atas.Semua dalam semua yang menggunakan ganda
caught_signal
sebagai penangan sinyal asinkron berarti dan sebagai variabel kontrol aliran lokal di dalam fungsi terasa seperti hack sangat kotor dan saya tidak suka kode. Saya menguji dengan memisahkan itu dan memperkenalkan variabel boolean kill_child untuk digunakan dalam tubuh fungsi dan kemudian memilikidi akhir fungsi. Dengan modifikasi itu saya tidak lagi mendapat
....killed
spam dari anacron.Jadi penjelasan panjang, dan mungkin informasi lebih banyak dari yang Anda butuhkan. Namun. Saya juga menemukan lebih banyak lagi, yang merupakan kabar baik bagi Anda karena Anda tidak perlu melakukan modifikasi lokal pada paket coreutils. Untuk kasus seperti menjalankan su dari cron Anda seharusnya menjalankan program runuser sebagai gantinya . Ini semacam berita "buruk" bagi saya karena itu membuat temuan saya di atas kurang penting, tetapi juga baik :).
sumber