Как написать cron, который будет запускать скрипт каждый день в полночь? - PullRequest
130 голосов
/ 21 октября 2010

Я слышал, что crontab - это хороший выбор, но как мне написать строку и куда мне ее поместить на сервер?

Ответы [ 6 ]

246 голосов
/ 21 октября 2010

Вот хороший урок о том, что такое crontab и как его использовать в Ubuntu.Ваша строка crontab будет выглядеть примерно так:

00 00 * * * ruby path/to/your/script.rb

(00 00 означает полночь - 0 минут и 0 часов - и значение * s означает каждый день каждого месяца.)

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
39 голосов
/ 20 сентября 2013

со страницы руководства

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, вы можете сделать одну из трех вещей:

  1. добавить команду в crontab пользователя, как показано выше (и из crontab, раздел 5, страница man).

    • редактировать пользовательский crontab как root с помощью crontab -e -u <username>
    • или отредактируйте crontab текущего пользователя, просто crontab -e
    • Вы можете установить редактор с помощью переменной окружения EDITOR
      • env EDITOR=nano crontab -e -u <username>
      • или установите значение EDITOR для всего сеанса оболочки
        1. export EDITOR=vim
        2. crontab -e
    • Сделать скрипты исполняемыми с chmod a+x <file>


  1. создайте скрипт / программу как задание cron и добавьте его в системные каталоги anacron /etc/cron.*ly

    • каталоги anacron /etc/cron.*ly:
      • / и т.д. / cron.daily
      • / и т.д. / cron.hourly
      • / и т.д. / cron.monthly
      • / и т.д. / cron.weekly
    • как в:
      • / и т.д. / cron.daily / script_runs_daily.sh
      • chmod a+x /etc/cron.daily/script_runs_daily.sh - сделать его исполняемым
    • См. Также справочную страницу по анакрону: man anacron
    • Сделать скрипты исполняемыми с chmod a+x <file>
    • Когда запускается скрипт cron. * Ly?
      • Для RHEL / CentOS 5.x они настроены на /etc/crontab или /etc/anacrontab для запуска в установленное время
      • Системы RHEL / CentOS 6.x + и Fedora 17+ Linux определяют это только в /etc/anacrontab и определяют cron.hourly в /etc/cron.d/0hourly


  1. Или можно создавать системные таблицы в /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
5 голосов
/ 06 января 2015

Иногда вам нужно будет указать 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/ruby-2.2.0@global/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/ruby-2.2.0@global

# 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 голосов
/ 02 октября 2014

Краткое руководство по настройке задания 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
1 голос
/ 17 марта 2017

Вы можете выполнить сценарий оболочки двумя способами: либо с помощью задания cron, либо написав сценарий оболочки

Допустим, имя вашего сценария - "yourscript.sh"

Сначала проверьте пользователяразрешение сценария.используйте приведенную ниже команду для проверки прав доступа пользователя к сценарию

ll script.sh

Если сценарий находится в корневом каталоге, используйте следующую команду

sudo crontab -e

Во-вторых, если скрипт содержит пользователя "ubuntu", используйте следующую команду:

crontab -e

Добавьте следующую строку в ваш crontab: -

55 23 * * * /path/to/yourscript.sh

Другой способ сделать это - написатьСценарий и запустите его в фоновом режиме

Вот сценарий, в который вы должны поместить имя сценария (например: - youscript.sh), который будет запускаться каждый день в 23:55

#!/bin/bash while true do /home/modassir/yourscript.sh sleep 1d done

сохранить его в файл (назовем его «every-day.sh»)

sleep 1d - означает, что он ждет один день, а затем снова запускается.

теперь дайте разрешение вашей команде script.use ниже: -

chmod + x every-day.sh

сейчас, запустите эту оболочкуСценарий в фоновом режиме с помощью «nohup».Это продолжит выполнение сценария даже после выхода из сеанса.

используйте приведенную ниже команду для выполнения сценария.

nohup ./every-day.sh &

Примечание: - чтобы каждый день запускать «yourscript.sh» в 23:55, нужно выполнять скрипт «Every-day.sh» ровно в 23:55.

0 голосов
/ 27 марта 2019

Поместите это предложение в файл crontab: 0 0 * * * / usr / local / bin / python /opt/ByAccount.py> /var/log/cron.log 2> & 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...