Как написать cron, который будет запускать сценарий каждый день в полночь?

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

5 ответов


вот хороший учебник о том, что такое 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

С главной страницы

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
   ...

хорошо отметить специальные "прозвища", которые могут быть использованы (задокументированы в man-странице), в частности" @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 текущего пользователя с помощью just crontab -e
    • вы можете установить редактор с EDITOR переменные среды
      • env EDITOR=nano crontab -e -u <username>
      • или установите значение редактора для всего сеанса оболочки
        1. export EDITOR=vim
        2. crontab -e
    • сделать скрипты исполняемые с chmod a+x <file>


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

    • запускаемые программы /и т. д./cron.*каталоги лы :
      • /и т. д./cron.ежедневно
      • /и т. д./cron.часам
      • /и т. д./cron.ежемесячно
      • /и т. д./cron.еженедельно!--39-->
    • as в:
      • /etc/cron.daily/script_runs_daily.sh
      • chmod a+x /etc/cron.daily/script_runs_daily.sh -- сделайте его исполняемым
    • Смотрите также страницу anacron man: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.ежечасно в /etc/cron.d/0hourly


  1. или можно создать системные crontables в /etc/cron.d.

    • ранее описанный синтаксис crontab (с дополнительным предоставлением пользователю для выполнения каждого задания as) помещается в файл, и файл удаляется в /etc/cron.каталог д'.
    • ими легко управлять в системе упаковка (например, пакеты RPM), поэтому обычно может быть специфичным для применения.
    • разница в синтаксисе заключается в том, что пользователь должен быть указан для задания cron после полей время/дата и перед командой для выполнения.
    • файлы добавлены в /etc/cron.d не обязательно быть исполняемым.
    • вот пример задания, которое выполнено как , использование /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

иногда вам нужно указать путь и 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

краткое руководство по настройке 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

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

предположим, что ваше имя скрипта "yourscript.sh"

сначала проверьте разрешение пользователя скрипта. используйте команду ниже, чтобы проверить разрешение пользователя скрипта

ll script.sh

если скрипт находится в root, то используйте команду ниже

sudo crontab-e

второй, если скрипт содержит пользователь "ubuntu", затем используйте команду ниже

crontab-e

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

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

другой способ сделать это-написать сценарий и запустить его в backgroud

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

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

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

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

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

chmod +x every-day.sh

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

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

nohup и ./every-day.sh &

Примечание:- Для работы "yourscript.sh" в 23:55pm каждый день,Вы должны выполнять "every-day.sh" сценарий ровно в 23:55pm.