Как выполнять команду каждые 10 секунд (без cron)?

36

Когда я выполняю, cronя получаю эту ошибку

cron: не могу открыть или создать /var/run/crond.pid: в доступе отказано

Итак, как это сделать без cron?

PS Я хочу проверить, изменился ли файл в SVN, и у меня есть специальный скрипт для этого.

UAdapter
источник
Если у вас нет разрешения, попробуйте запустить cron с sudo.
Аноним
4
Имейте в виду, что cron не будет делать что-либо каждые 10 секунд, самое гранулярное, что он получает, - это раз в минуту.
Цезий
Если вы хотите сделать cronjobs, вам нужно запустить crontab -eредактор. Чтобы составить список текущих крон, запуститеcrontab -l
Lekensteyn
@ Аноним Я не знаю пароль root, поэтому sudo мне не поможет.
UAdapter
unix.stackexchange.com/questions/10646/…
Сиро Сантилли 新疆 改造 中 at 法轮功 六四 事件

Ответы:

59

Чтобы получить доступ к вашей личной cronконфигурации, вы должны использовать команду crontab -e(для редактирования таблицы cron).

Альтернативой является watchкоманда:

watch -n10 command args

Наконец, для более эффективного мониторинга файловой системы событий, вы можете использовать inotifywait, из inotify-toolsпакета.

enzotib
источник
1
Стоит отметить, что, возможно, вам лучше заключить свои команды в двойные кавычки, иначе вы можете получить неожиданные результаты. watch -n<timeout> "command(s) arg(s)"какwatch -n2 "ps ux | grep ss5"
Ахиллес
Мне было трудно watchпринимать длинные, сложные команды, используя каналы и кавычки. Цикл while сработал, но, конечно, всегда нужно сначала спать, чтобы избежать безудержного пиджа.
rjurney
@ rjurney: этого должно быть достаточно, чтобы заключить всю команду в кавычки, одинарные или лучше двойные:watch -n10 "ls -l | grep $foo"
enzotib
@enzotib Проблема возникает, когда в командах есть кавычки, так как кавычки в кавычках внутри (да поможет мне бог) кавычки невозможны в bash. Теоретически это должно быть возможно, но я редко получаю вложенные кавычки в bash, не сдаваясь и не идя другим путем.
Рюрни
32

Вы можете написать скрипт оболочки sleepс циклом while.

#!/bin/sh
while [ true ]
do
    sh special_svn_script.sh
    sleep 10
done
анонимное
источник
5
while trueне требует квадратных скобок, в противном случае «true» интерпретируется как строка, и каждая строка так же хороша, как и «true».
энзотиб
1
@enzotib, так что вы могли бы так же написать, находясь рядом
Эдуард Флоринеску
Хотя это работает, вы всегда должны спать в первую очередь, потому что может произойти что-то, что приведет к тому, что шаг сна не будет достигнут, и в этом случае у вас будет беглый пид, затопляющий что-то.
rjurney
4

gnome-schedule (нажмите кнопку дляInstall now!использования вашего центра программного обеспечения)
- это графический пользовательский интерфейс, который использует возможности vixie-cron, dcron и at для управления файлом crontab и предоставляет простой способ планирования задач на вашем компьютере. Он поддерживает периодические (периодические) задачи и задачи, которые случаются только один раз в будущем. Он написан на Python с использованием pygtk.

Потрясающие возможности

  • Поддерживает пользовательские заголовки и значки для ваших задач, чтобы их было легче отслеживать
  • Поддержка шаблонов, так что вам не придется создавать одну и ту же задачу снова и снова; они сохраняются в gconf и могут легко поставляться с, скажем, дистрибутивом Linux
  • При запуске от имени пользователя root вы можете редактировать задачи любого пользователя crontab и «at».
  • Удобочитаемые строки, такие как «Каждый час» вместо «0 * * * *»
  • Расширенный режим для экспертов crontab
  • Предоставляет «апплет панели», где вы можете управлять задачами из выпадающего меню
  • Предопределенные общие выражения, такие как: каждую минуту, каждую неделю, завтра, следующую неделю. Календарь позволяет вам выбрать день, когда вы хотите выполнить задачу.
hhlp
источник