Как мне периодически запускать команду с очень коротким интервалом и получать возврат?


12

Мне нужно вызвать определенную команду с интервалом около 5 секунд. Как мне настроить демон / процесс, работающий в фоновом режиме или что-то подобное для этого? Я посмотрел на cronjobs, но минимальный интервал составляет 1 минуту. Любой совет приветствуется;)

Fedora это система.

РЕДАКТИРОВАТЬ команду будет bashscript, так что «смотреть» не будет делать это, я думаю.

Ответы:


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

Зачем отрицать? что если я бегу без него?
Ганс

@Marcel, disownудаляет последнее задание из таблицы заданий оболочки, превращая его в демона, как вы и просили. Это не настоящий демон, потому что он все еще подключен к терминалу и находится в той же группе процессов, но он будет продолжать работать после закрытия оболочки.
Джулиано

хорошо, отлично, это сработало бы: D Просто ради любопытства, как бы я "сделал" демона?
Ганс

@Marcel - это простой способ вызова daemon (3) из C или другого языка с доступом к библиотеке (не из сценария оболочки). Это трудный путь .
Джулиано

14

Как вы думаете, почему «часы» не будут работать?

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

$ watch -n 5 ./periodic.sh

что если я выйду из системы? скрипт должен продолжить работу.
Ганс

Это остановится, но вы можете использовать nohup watch -n 5 ./periodic.sh > periodic.log &и сохранить вывод.
Науфраги

для передачи по трубопроводу используйте '' цитирование, потому что команда th дана для "sh -c", что означает, что вам может потребоваться использовать дополнительное цитирование, чтобы получить желаемый эффект "
andrej

2

Может быть, с nohup? Он предназначен для запуска работы после закрытия оболочки.

Вы также можете использовать экраны.


0

Команда watchподходит в вашем случае, я бы использовал терминальный мультиплексор (например, tmux, screen и т. Д.), А затем запустил команду, используя

watch -n 5 ./script.sh

В этом случае, даже если вы закроете терминал или ssh-соединение с машиной, скрипт все равно будет работать.

Единственным ограничением этого подхода является то, что скрипт будет запускаться каждые 5 секунд, только если он завершил свое выполнение в течение этого интервала времени.


Поскольку ФП прямо заявил, что, по его мнению, watchэтого не сделает, пожалуйста, объясните, почему ваш ответ преодолевает это ограничение или в какой момент вы считаете, что ФП ошибся watchиз-за того, что он не подходит для этой задачи.
AdminBee
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.