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

12

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

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

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

Hans
источник

Ответы:

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
naufraghi
источник
что если я выйду из системы? скрипт должен продолжить работу.
Ганс
Это остановится, но вы можете использовать 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 секунд, только если он завершил свое выполнение в течение этого интервала времени.

JIMS
источник
Поскольку ФП прямо заявил, что, по его мнению, watchэтого не сделает, пожалуйста, объясните, почему ваш ответ преодолевает это ограничение или в какой момент вы считаете, что ФП ошибся watchиз-за того, что он не подходит для этой задачи.
AdminBee