Я слышал, что crontab - хороший выбор, но как мне написать строку и где разместить ее на сервере?
Я слышал, что crontab - хороший выбор, но как мне написать строку и где разместить ее на сервере?
Ответы:
Вот хороший учебник о том, что такое crontab и как его использовать в Ubuntu. Ваша строка crontab будет выглядеть примерно так:
00 00 * * * ruby path/to/your/script.rb
( 00 00
указывает на полночь - 0 минут и 0 часов - и *
s означает каждый день каждого месяца.)
Синтаксис: mm hh dd mt wd команда мм минут 0-59 чч час 0-23 дд день месяца 1-31 mt месяц 1-12 ср день недели 0-7 (воскресенье = 0 или 7) команда: что вы хотите запустить все числовые значения можно заменить на *, что означает все
/etc/crontab
(в Ubuntu), но при запуске crontab -e
вы редактируете специфичный для пользователя crontab, который не позволяет использовать этот столбец. IIRC Ubuntu не рекомендует выходить /etc/crontab
вручную, потому что он может быть перезаписан. См. Здесь: stackoverflow.com/questions/8475694/…
sudo crotab -u root -e
со страницы руководства
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 -e -u <username>
crontab -e
EDITOR
переменной окружения
env EDITOR=nano crontab -e -u <username>
export EDITOR=vim
crontab -e
chmod a+x <file>
создать сценарий / программу как задание cron и добавить его в системные /etc/cron.*ly
каталоги anacron
chmod a+x /etc/cron.daily/script_runs_daily.sh
- сделать его исполняемымman anacron
chmod a+x <file>
/etc/crontab
или /etc/anacrontab
работают в заданное время./etc/anacrontab
, а cron.hourly - в/etc/cron.d/0hourly
Или, можно создать системные crontables в /etc/cron.d
.
/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
Краткое руководство по настройке задания 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
Иногда вам нужно указать 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
Вы можете выполнить сценарий оболочки двумя способами: либо с помощью задания 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
сохраните его в файл (назовем его "каждый день.sh")
sleep 1d - означает, что он ждет один день, а затем снова запускается.
теперь дайте разрешение вашему скрипту. используйте команду ниже: -
chmod + x every-day.sh
Теперь выполните этот сценарий оболочки в фоновом режиме с помощью «nohup». Это продолжит выполнение сценария даже после выхода из сеанса.
используйте команду ниже для выполнения скрипта.
nohup ./every-day.sh &
Примечание: - чтобы запускать "yourscript.sh" каждый день в 23:55, вы должны выполнять сценарий "every-day.sh" ровно в 23:55.