Як написати крон, який буде запускати сценарій щодня опівночі?


144

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

Відповіді:


261

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

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

( 00 00вказує опівночі - 0 хвилин і 0 годин - і *середнє значення кожного дня кожного місяця.)

Синтаксис: 
  мм hh dd mt wd команда

  мм хв 0-59
  год год 0-23
  день день 1-31 місяця
  mt місяць 1-12
  wd день тижня 0-7 (неділя = 0 або 7)
  команда: те, що ти хочеш запустити
  всі числові значення можуть бути замінені на *, що означає все

1
Ви не пропускаєте стовпець "запустити як користувача"?
Лукас Кімон

4
@LucasCimon Колонок користувача (який буде йти до команди) допускається в /etc/crontab(на Ubuntu), але при запуску crontab -eредагування конкретного користувача кронтаб, який не дозволяє цей стовпець. IIRC Ubuntu перешкоджає виходу /etc/crontabвручну, тому що він може бути перезаписаний. Дивіться тут: stackoverflow.com/questions/8475694/…
Йорданія, що працює

@ Джордан, тому відповідь на crontab для root єsudo crotab -u root -e
тире

40

зі сторінки man

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

Ви також можете використовувати цей трюк, щоб виконувати свою роботу з кроном кілька разів на хвилину.

   # 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 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 та додати його до /etc/cron.*lyкаталогів анакронів системи

    • anacron /etc/cron.*ly каталоги:
      • /etc/cron.daily
      • /etc/cron.hourly
      • /etc/cron.місячно
      • /etc/cron.weekly
    • а саме:
      • /etc/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. Або можна створити системні 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

5

Іноді вам потрібно буде вказати 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

Короткий посібник по налаштуванню завдання на 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

Синтаксис crontab невірний за 03:45. Поля crontab - це Хвилина, а потім Година, тобто "45 03" - ви маєте її назад у своєму дописі.
Russell E Glaue

1

Ви можете виконати скрипт оболонки двома способами, використовуючи завдання cron або написавши скрипт оболонки

Давайте припустимо, що назва вашого сценарію - "yourscript.sh"

Спочатку перевірте дозвіл користувача на сценарій. Використовуйте команду нижче, щоб перевірити дозвіл користувача на сценарій

Lll script.sh

Якщо скрипт знаходиться в корені, то використовуйте команду нижче

sudo crontab -e

По-друге, якщо скрипт містить у користувача "ubuntu", тоді використовуйте команду нижче

кронтаб -е

Додайте наступний рядок у свій 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")

сон 1д - означає, що він чекає один день, а потім знову запускається.

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

chmod + x Every-day.sh

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

використовувати команду нижче для виконання сценарію.

nohup ./every-day.sh &

Примітка. - Щоб запускати "sopcript.sh" о 23:55 щодня, вам потрібно виконати сценарій "Every-day.sh" рівно о 23:55.


0

Помістіть це речення у файл crontab: 0 0 * * * / usr / local / bin / python /opt/ByAccount.py> /var/log/cron.log 2> & 1

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.