Bagaimana cara menjalankan perintah secara berkala dengan interval yang sangat singkat dan mendapatkan pengembalian?


12

Saya perlu memanggil perintah tertentu dalam interval sekitar 5 detik. Bagaimana saya mengatur daemon / proses yang berjalan di latar belakang atau sesuatu yang serupa untuk melakukan itu? Saya melihat cronjobs, tetapi interval minimum tampaknya 1 menit. Semua saran dihargai;)

Fedora adalah sistemnya.

EDIT perintahnya akan menjadi bashscript, jadi "menonton" tidak akan saya lakukan.

Jawaban:


10
(
  while true
  do
    your-command-here
    sleep 5
  done
) &
disown

untuk apa disown? bagaimana jika saya lari tanpanya?
Hans

@ Marscel, disownmenghapus pekerjaan terakhir dari tabel pekerjaan shell, menjadikannya semacam daemon, seperti yang Anda minta. Ini bukan daemon sungguhan karena masih terpasang ke terminal dan berada di grup proses yang sama, tetapi akan tetap berjalan setelah Anda menutup shell.
Juliano

oke bagus, itu akan berhasil: D Hanya untuk rasa ingin tahu bagaimana saya "membuat" daemon?
Hans

@Marcel cara sederhana adalah memanggil daemon (3) dari C atau bahasa lain dengan akses perpustakaan (bukan dari skrip shell). Ini cara yang sulit .
Juliano

14

Mengapa Anda berpikir 'menonton' tidak akan berhasil?

$ cat periodic.sh
#!/bin/bash
echo $(date)
$ chmod +x periodic.sh

$ watch -n 5 ./periodic.sh

bagaimana jika saya logout? skrip harus terus berjalan.
Hans

Ini akan berhenti, tetapi Anda dapat menggunakan nohup watch -n 5 ./periodic.sh > periodic.log &dan menyimpan hasilnya.
naufraghi

untuk pemipaan gunakan '' mengutip karena perintah "diberikan kepada" sh-c "yang berarti bahwa Anda mungkin perlu menggunakan kutipan tambahan untuk mendapatkan efek yang diinginkan"
andrej

2

Mungkin dengan nohup? Ini dirancang untuk membiarkan pekerjaan berjalan setelah shell ditutup.

Anda juga dapat menggunakan layar.


0

The watchperintah yang sesuai dalam kasus Anda, saya akan menggunakan multiplexer terminal (misalnya tmux, layar, dll) dan kemudian jalankan perintah menggunakan

watch -n 5 ./script.sh

Jika demikian, bahkan jika Anda menutup terminal atau koneksi ssh ke mesin, skrip tetap akan berjalan.

Satu-satunya batasan dari pendekatan ini adalah bahwa skrip akan berjalan setiap 5 detik hanya jika telah menyelesaikan eksekusi dalam interval waktu tersebut.


Karena OP secara eksplisit menyatakan bahwa menurut pendapatnya watchtidak akan melakukannya, tolong jelaskan mengapa jawaban Anda mengatasi batasan ini atau pada titik mana Anda berpikir OP salah watchkarena tidak cocok untuk tugas tersebut.
AdminBee
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.