Saya menggunakan CentOS 7 apa tujuan saya adalah membuat cron untuk setiap lima detik, tetapi ketika saya meneliti kita dapat menggunakan cron hanya untuk satu menit sehingga yang saya lakukan sekarang adalah saya telah membuat file shell.
hit.sh
while sleep 5; do curl http://localhost/test.php; done
tapi saya telah memukulnya secara manual melalui mengklik kanan itu.
Yang saya inginkan adalah membuat layanan untuk file itu sehingga saya dapat memulai dan menghentikannya secara otomatis.
Saya menemukan skrip untuk membuat layanan
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....
# Source function library.
. /etc/init.d/functions
start() {
# code to start app comes here
# example: daemon program_name &
}
stop() {
# code to stop app comes here
# example: killproc program_name
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
# code to check status of app comes here
# example: status program_name
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0
Tetapi saya tidak tahu apa yang harus ditulis dalam metode start atau stop. Saya mencoba menempatkan konten yang sama dari hit.sh di start(){}
tetapi itu memberi kesalahan }
dalam metode berhenti.
/usr/bin/myscript
berfungsi dengan baik ketika Anda menjalankannya sendiri? Apa outputecho $?
ketika skrip telah menyelesaikan proses? Apakah itu 203?/usr/bin/myscript.sh
berfungsi dengan baik pada eksekusi melalui terminal danecho$?
memberi saya1
Jawaban:
Jika Anda ingin menggunakan kembali contoh kode Anda, itu bisa terlihat seperti:
Tentu saja, skrip yang ingin Anda jalankan sebagai layanan harus menuju ke misalnya
/usr/local/bin/hit.sh
, dan kode di atas harus pergi ke/etc/init.d/hitservice
.Untuk setiap runlevel yang membutuhkan layanan ini berjalan, Anda harus membuat symlink masing-masing. Misalnya, symlink bernama
/etc/init.d/rc5.d/S99hitservice
akan memulai layanan untuk runlevel 5. Tentu saja, Anda masih dapat memulai dan menghentikannya secara manual melaluiservice hitservice start
/service hitservice stop
sumber
systemd
skrip, sehingga sufiks tidak diperlukan. Anda harus dapat menjalankan skrip lama dengansystemd
baik. Sudahkah Anda mencobasystemctl enable hitservice
?Saya percaya CentOS 7 dan di atas menggunakan systemd. Jika demikian halnya dengan sistem Anda, coba yang berikut ini:
Tempatkan perintah skrip yang ingin Anda jalankan
/usr/bin/myscript
.Ingatlah untuk membuat skrip dapat dieksekusi
chmod +x
.Buat file berikut:
/etc/systemd/system/my.service
Muat ulang semua file layanan systemd:
systemctl daemon-reload
Periksa apakah berfungsi dengan memulai layanan dengan
systemctl start my
.Bonus:
Untuk menguji layanan systemd, dimungkinkan untuk meluncurkan lingkungan tmux dengan dua panel jendela, di mana jendela atas memonitor output dari skrip (
stdout
danstderr
) dan jendela bawah dapat digunakan untuk memulai kembali layanan. Ini perlutmux
diinstal, maka cukup:Kemudian mulai kembali layanan dengan:
Keluar
tmux
denganctrl-d
laluctrl-c
.sumber
Type=forking
. Kemungkinan penanya perluType=simple
tetapi secara umum forking tidak disarankan: 0pointer.de/public/systemd-man/… . Orang-orang telah mengambil skrip init lama mereka dan membungkusnyasystemd
sehingga permulaan layanan mereka berjalansystemd(init-script(service))
. Namunsystemd
adalah pengganti untuk skrip init, jadi Anda harus memanggil layanan secara langsungsystemd
sehingga terlihat sepertisystemd(service)
.Ini skrip saya sebagai layanan:
sumber
Lihatlah fpm. Ini adalah alat yang akan membuat skrip init untuk Anda. Bekerja pada banyak platform (systemd, pemula, dll ..)
https://github.com/jordansissel/fpm
sumber
Lihat proyek Bash Service Manager : https://github.com/reduardo7/bash-service-manager
Contoh implementasi
Contoh penggunaan
sumber