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



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

785   5  

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

хорошо отметить специальные "ники", которые могут быть использованы (задокументированы на странице руководства), в частности" @reboot", который не имеет альтернативы времени и даты.

   # Run once after reboot.
   @reboot         /usr/local/sbin/run_only_once_after_reboot.sh

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

   # 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, раздел 5, man-страница).

    • редактировать crontab пользователя как корень с crontab -e -u <username>
    • или редактировать crontab текущего пользователя с помощью только 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 каталоги

    • anacron / etc / cron.*каталоги лы :
      • / etc / cron.ежедневно
      • / etc / cron.ежечасно
      • / etc / cron.ежемесячно
      • / etc / cron.еженедельно
    • как в:
      • /etc/cron.daily/script_runs_daily.sh
      • chmod a+x /etc/cron.daily/script_runs_daily.sh -- сделайте его исполняемым
    • Смотрите также в разделе запускаемые программы Человек: man anacron
    • сделать скрипты исполняемыми с chmod a+x <file>
    • когда делают эти cron.*лы запустить скрипт?
      • для 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 не нужно быть исполняемый.
    • вот пример задания, которое выполняется от имени пользователя 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

иногда вам нужно будет указать путь и 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 или написав shell-скрипт

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

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

ll script.sh

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

sudo crontab-e

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

crontab-e

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

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-означает, что он ждет один день, а затем снова запускается.

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

chmod +x every-day.sh

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

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

nohup ./every-day.sh &

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

Comments

    Ничего не найдено.