Làm cách nào để tôi định kỳ chạy một lệnh với khoảng thời gian rất ngắn và nhận được trả về?


12

Tôi cần gọi một lệnh cụ thể trong khoảng 5 giây. Làm cách nào để thiết lập trình nền / tiến trình đang chạy trong nền hoặc một cái gì đó tương tự để làm điều đó? Tôi đã xem cronjobs, nhưng khoảng thời gian tối thiểu dường như là 1 phút. Mọi lời khuyên đều được đánh giá cao;)

Fedora là hệ thống.

EDIT lệnh sẽ là một bashscript, vì vậy "xem" sẽ không làm điều đó tôi nghĩ.

Câu trả lời:


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

bị từ chối vì điều gì? Nếu tôi chạy mà không có nó thì sao?
Hans

@Marcel, disownloại bỏ công việc cuối cùng khỏi bảng công việc shell, làm cho nó trở thành một trình nền, như bạn đã hỏi. Nó không phải là một daemon thực sự bởi vì nó vẫn được gắn vào thiết bị đầu cuối và nằm trong cùng một nhóm quy trình, nhưng nó sẽ tiếp tục chạy sau khi bạn đóng vỏ.
Juliano

Được rồi, điều đó sẽ hiệu quả: D Chỉ vì tò mò tôi sẽ "làm" một daemon như thế nào?
Hans

@Marcel cách đơn giản là gọi daemon (3) từ C hoặc ngôn ngữ khác có quyền truy cập thư viện (không phải từ tập lệnh shell). Đây là cách khó khăn .
Juliano

14

Tại sao bạn nghĩ 'xem' sẽ không hoạt động?

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

$ watch -n 5 ./periodic.sh

Nếu tôi đăng xuất thì sao? tập lệnh sẽ tiếp tục chạy.
Hans

Nó sẽ dừng lại, nhưng bạn có thể sử dụng nohup watch -n 5 ./periodic.sh > periodic.log &và lưu trữ đầu ra.
naufraghi

đối với đường ống, hãy sử dụng lệnh '' trích dẫn vì lệnh "được đưa cho" sh -c "có nghĩa là bạn có thể cần sử dụng trích dẫn thêm để có được hiệu ứng mong muốn"
andrej

2

Có lẽ với nohup? Nó được thiết kế để cho một công việc chạy sau khi vỏ được đóng lại.

Bạn cũng có thể sử dụng màn hình.


0

Các watchlệnh là thích hợp trong trường hợp của bạn, tôi sẽ sử dụng một bộ đa thiết bị đầu cuối (ví dụ tmux, màn hình, vv) và sau đó chạy lệnh sử dụng

watch -n 5 ./script.sh

Trong trường hợp đó, ngay cả khi bạn đóng kết nối đầu cuối hoặc ssh với máy, tập lệnh vẫn sẽ chạy.

Hạn chế duy nhất của phương pháp này là tập lệnh sẽ chạy cứ sau 5 giây nếu nó đã hoàn thành việc thực thi trong khoảng thời gian đó.


Vì OP tuyên bố rõ ràng rằng theo ý kiến ​​của anh ấy watchsẽ không làm điều đó, vui lòng giải thích lý do tại sao câu trả lời của bạn vượt qua giới hạn này hoặc tại thời điểm đó bạn nghĩ rằng OP đã nhầm lẫn về watchviệc không phù hợp với nhiệm vụ.
AdminBee
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.