Я слышал, что crontab - хороший выбор, но как я могу написать строку и где ее разместить на сервере?
Как написать cron, который будет запускать script каждый день в полночь?
Ответ 1
Вот хороший учебник о том, что такое crontab и как его использовать на Ubuntu. Ваша линия crontab будет выглядеть примерно так:
00 00 * * * ruby path/to/your/script.rb
(00 00
означает полночь - 0 минут и 0 часов - и *
означает каждый день каждого месяца.)
Syntax: mm hh dd mt wd command mm minute 0-59 hh hour 0-23 dd day of month 1-31 mt month 1-12 wd day of week 0-7 (Sunday = 0 or 7) command: what you want to run all numeric values can be replaced by * which means all
Ответ 2
на странице руководства
linux$ man -S 5 crontab
cron(8) examines cron entries once every minute.
The time and date fields are:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
...
# run five minutes after midnight, every day
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
...
Хорошо отметить специальные "прозвища", которые могут быть использованы (задокументированы на странице руководства), особенно "@reboot", у которой нет альтернативы времени и даты.
# Run once after reboot.
@reboot /usr/local/sbin/run_only_once_after_reboot.sh
Вы также можете использовать этот трюк для выполнения задания cron несколько раз в минуту.
# Run every minute at 0, 20, and 40 second intervals
* * * * * sleep 00; /usr/local/sbin/run_3times_per_minute.sh
* * * * * sleep 20; /usr/local/sbin/run_3times_per_minute.sh
* * * * * sleep 40; /usr/local/sbin/run_3times_per_minute.sh
Чтобы добавить задание cron, вы можете сделать одну из трех вещей:
-
добавить команду пользователю crontab, как показано выше (и из раздела crontab, раздел 5, справочная страница).
- отредактируйте пользователя crontab как root с помощью
crontab -e -u <username>
- или отредактируйте текущий crontab пользователя только с помощью
crontab -e
- Вы можете настроить редактор с помощью переменной среды
EDITOR
-
env EDITOR=nano crontab -e -u <username>
- или установите значение EDITOR для всего сеанса оболочки
-
export EDITOR=vim
-
crontab -e
-
-
- Сделать скрипты исполняемыми с помощью
chmod a+x <file>
- отредактируйте пользователя crontab как root с помощью
-
создайте script/программу как задание cron и добавьте ее в каталог anacron
/etc/cron.*ly
- anacron/etc/cron.* справочники:
- /etc/cron.daily
- /etc/cron.hourly
- /etc/cron.monthly
- /etc/cron.weekly
- как в:
- /etc/cron.daily/script_runs_daily.sh
-
chmod a+x /etc/cron.daily/script_runs_daily.sh
- сделать его исполняемым
- См. также страницу man anacron:
man anacron
- Сделать скрипты исполняемыми с помощью
chmod a+x <file>
- Когда выполняются эти cron. * ly script?
- Для RHEL/CentOS 5.x они настроены в
/etc/crontab
или/etc/anacrontab
для запуска в установленное время - Системы RHEL/CentOS 6.x + и Fedora 17+ определяют это только в
/etc/anacrontab
и определяют cron.hourly в/etc/cron.d/0hourly
- Для RHEL/CentOS 5.x они настроены в
- anacron/etc/cron.* справочники:
-
Или можно создать системные crontables в
/etc/cron.d
.- Ранее описанный синтаксис crontab (с дополнительным предоставлением пользователю для выполнения каждого задания как) помещается в файл, а файл удаляется в каталог /etc/cron.d.
- Они легко управляются в системной упаковке (например, RPM-пакетах), поэтому обычно могут быть специфичными для приложений.
- Разница в синтаксисе заключается в том, что пользователь должен указываться для задания cron после полей времени и даты и перед выполнением команды.
- Файлы, добавленные в
/etc/cron.d
, не должны быть исполняемыми. - Вот пример задания, выполняемого как пользователь
someuser
, и использование/bin/bash
, поскольку оболочка принудительно.
File: /etc/cron.d/myapp-cron
# use /bin/bash to run commands, no matter what /etc/passwd says
SHELL=/bin/bash
# Execute a nightly (11:00pm) cron job to scrub application records
00 23 * * * someuser /opt/myapp/bin/scrubrecords.php
Ответ 3
Иногда вам нужно указать PATH и GEM_PATH с помощью crontab с rvm.
Вот так:
# top of crontab file
PATH=/home/user_name/.rvm/gems/ruby-2.2.0/bin:/home/user_name/.rvm/gems/[email protected]/bin:/home/user_name/.rvm/rubies/ruby-2.2.$
GEM_PATH=/home/user_name/.rvm/gems/ruby-2.2.0:/home/user_name/.rvm/gems/[email protected]
# jobs
00 00 * * * ruby path/to/your/script.rb
00 */4 * * * ruby path/to/your/script2.rb
00 8,12,22 * * * ruby path/to/your/script3.rb
Ответ 4
Краткое руководство по настройке задания cron
Создайте новый текстовый файл, например: mycronjobs.txt
Для каждой ежедневной работы (00:00, 03:45) сохраните строки расписания в файле mycronjobs.txt
00 00 * * * ruby path/to/your/script.rb
45 03 * * * path/to/your/script2.sh
Отправляйте задания в cron (каждый раз, когда вы запускаете это, cron удаляет то, что было сохранено, и обновляет новую информацию в файле mycronjobs.txt)
crontab mycronjobs.txt
Дополнительная полезная информация
См. текущие задания cron
crontab -l
Удалить все задания cron
crontab -r
Ответ 5
Вы можете выполнить оболочку script двумя способами: либо с помощью задания cron, либо путем написания оболочки script
Предположим, что ваше имя script - "yourscript.sh"
Сначала проверьте разрешение пользователя script. используйте команду ниже, чтобы проверить разрешение пользователя script
ll script.sh
Если script находится в корне, используйте ниже команду
sudo crontab -e
Во-вторых, если script содержит пользователя "ubuntu", используйте ниже команду
crontab -e
Добавьте следующую строку в свой crontab: -
55 23 * * */path/to/yourscript.sh
Другой способ сделать это - написать script и запустить его в backgroud
Вот script, где вы должны поместить свое имя script (например: - youscript.sh), которое будет запущено в 23:55 вечера каждый день
#!/bin/bash
while true
do
/home/modassir/yourscript.sh
sleep 1d
done
сохранить его в файле (давайте назовите его "everyday.sh" )
sleep 1d - означает, что он ждет один день, а затем снова запустится.
теперь дайте разрешение на использование script.use ниже: -
chmod + x everyday.sh
выполните эту оболочку script в фоновом режиме, используя "nohup". Это приведет к выполнению script даже после выхода из сеанса.
используйте команду ниже для выполнения script.
nohup./every-day.sh &
Примечание. - Чтобы запустить "yourscript.sh" в 23:55 ежедневно, вам нужно выполнить "every-day.sh" script ровно 23:55 вечера.