Не могли бы вы посоветовать мне, что писать, crontabчтобы он выполнял какую-то работу (для тестирования, которую я буду использовать /usr/bin/chromium-browser) каждые 15 секунд?
Вы не можете опускаться ниже 1 минуты детализации с помощью cron. То, что вы можете сделать, это каждую минуту запускать скрипт, который запускает вашу работу, ждет 15 секунд и повторяется. Следующая строка crontab будет запускаться some_jobкаждые 15 секунд.
* * * * * for i in 0 1 2; do some_job & sleep 15; done; some_job
Этот сценарий предполагает, что работа никогда не займет более 15 секунд. Следующий немного более сложный скрипт заботится о том, чтобы не запускать следующий экземпляр, если он слишком долго запускался. Он опирается на dateподдержку %sформата (например, GNU или Busybox, так что вы будете в порядке в Linux). Если вы поместите его непосредственно в crontab, обратите внимание, что %символы должны быть написаны как \%в строке crontab.
Однако я отмечу, что если вам нужно запускать задание так часто, как каждые 15 секунд, вероятно, cron - неправильный подход. Хотя юниты хороши для короткоживущих процессов, накладные расходы на запуск программы каждые 15 секунд могут быть незначительными (в зависимости от того, насколько требовательной является программа). Разве вы не можете запускать свое приложение все время, и оно будет выполнять свою задачу каждые 15 секунд?
также может быть: for i in 1 2 3 4 ; do some_job & sleep 15; done(последний сон не повлияет на следующий запуск), но способ, которым вы это делаете, вероятно, лучше подходит для определения времени исходящей почты cronjob (отправленной сразу после последнего some_job, целых 15 секунд позже в мой вариант)
Для того, чтобы предотвратить работу от вмешательства в себя, мы ограничиваем его во время выполнения до 15 секунд с помощью GNU Coreutils " timeoutдля каждого задания. Тем не менее, обратите внимание, что если задание не завершается должным образом сразу по истечении 15 секунд, у вас все равно могут возникнуть проблемы. Обратитесь к руководству по командам для получения подробной информации о том, как решить это, если это становится проблемой. Также обратите внимание, что если команда длится дольше 15 секунд и тайм-аут убивает ее, вы получите ненулевой статус выхода, который вызовет cronjob-email.
Ницца. Если процесс выполняется долго, то следующий процесс, вероятно, также окажется на другом ядре. Не уверен, сможете ли вы сознательно установить сродство ядра для заданий Cron, но это может сделать этот подход еще лучше.
Тим
@ Хорошая мысль. Я обратился к этому несколько в редактировании.
Отей
2
Короче говоря, cron не настолько гранулирован со временем. Самый короткий период вы получите 1 мин.
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .----- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
* * * * /usr/bin/chromium-browser
Однако вы можете написать скрипт, который будет запускаться каждые 15 секунд ...
У меня есть строка * * * * * /usr/bin/chromium-browserв crontab. Согласно инструкции, он должен запускаться каждую минуту, но ничего не работает.
xralf
Сложно ли написать такой сценарий? Должен ли я задать еще один вопрос или его можно написать здесь?
xralf
У заданий Cron нет терминала, поэтому я ожидаю сбоя браузера. Это может сделать это молча.
BillThor
Мои журналы cron находятся в / var / log / cron для производных от redhat, т.е. fedora, centos и т. д. Это также может помочь вам точно описать, что вы пытаетесь сделать, чтобы у людей была полная картина того, что происходит.
rfelsburg
1
В вашем crontab:
* * * * /usr/bin/chromium-browser_starter
Тогда в /usr/bin/chromium-browser_starter:
#!/bin/sh
# chromium-browser_starter
#
# Schedules /usr/bin/chromium-browser to run every 15 seconds for a minute.
# Intended to be called every minute through crond(8).
for ((secs=0; secs<46; secs+=15)); do
(sleep $secs; /usr/bin/chromium-browser "$@") &
done
wait
Ответы:
Вы не можете опускаться ниже 1 минуты детализации с помощью cron. То, что вы можете сделать, это каждую минуту запускать скрипт, который запускает вашу работу, ждет 15 секунд и повторяется. Следующая строка crontab будет запускаться
some_job
каждые 15 секунд.Этот сценарий предполагает, что работа никогда не займет более 15 секунд. Следующий немного более сложный скрипт заботится о том, чтобы не запускать следующий экземпляр, если он слишком долго запускался. Он опирается на
date
поддержку%s
формата (например, GNU или Busybox, так что вы будете в порядке в Linux). Если вы поместите его непосредственно в crontab, обратите внимание, что%
символы должны быть написаны как\%
в строке crontab.Однако я отмечу, что если вам нужно запускать задание так часто, как каждые 15 секунд, вероятно, cron - неправильный подход. Хотя юниты хороши для короткоживущих процессов, накладные расходы на запуск программы каждые 15 секунд могут быть незначительными (в зависимости от того, насколько требовательной является программа). Разве вы не можете запускать свое приложение все время, и оно будет выполнять свою задачу каждые 15 секунд?
источник
1 2 3 4 ; do some_job & sleep 15; done
(последний сон не повлияет на следующий запуск), но способ, которым вы это делаете, вероятно, лучше подходит для определения времени исходящей почты cronjob (отправленной сразу после последнего some_job, целых 15 секунд позже в мой вариант)Другой подход, чем у других: запустите 4 cronjobs, каждый в шахматном порядке на 15 секунд:
Для того, чтобы предотвратить работу от вмешательства в себя, мы ограничиваем его во время выполнения до 15 секунд с помощью GNU Coreutils "
timeout
для каждого задания. Тем не менее, обратите внимание, что если задание не завершается должным образом сразу по истечении 15 секунд, у вас все равно могут возникнуть проблемы. Обратитесь к руководству по командам для получения подробной информации о том, как решить это, если это становится проблемой. Также обратите внимание, что если команда длится дольше 15 секунд и тайм-аут убивает ее, вы получите ненулевой статус выхода, который вызовет cronjob-email.источник
Короче говоря, cron не настолько гранулирован со временем. Самый короткий период вы получите 1 мин.
Однако вы можете написать скрипт, который будет запускаться каждые 15 секунд ...
источник
* * * * * /usr/bin/chromium-browser
в crontab. Согласно инструкции, он должен запускаться каждую минуту, но ничего не работает.В вашем crontab:
Тогда в
/usr/bin/chromium-browser_starter
:источник
ps aux | grep chrom
через минуту, я не вижу работающего браузера Chromium.sleep
.