- Скрипты и планировщик задач в ОС Linux
- How to Schedule a Task in Linux?
- Method 1: Schedule a Task Using cron Job
- Example: Printing Date and Time After Every Minute
- Method 2: Schedule a Task Using “at” Command
- For CentOS/RHEL
- For Arch
- For Fedora
- Example: Scheduling echo Command After Specific Time
- Bonus Tip: How To Delete a Job at Command?
- Conclusion
Скрипты и планировщик задач в ОС Linux
В данном посте обсуждаются базовые принципы написания скриптов и работа планировщика заданий в Oracle Linux. Рассматриваются следующие вопросы:
1. Скрипты в ОС Linux
Скрипты в ОС на базе Linux – это набор команд, записанных в файл. Это делается с целью быстрого и удобного вызова последовательности этих команд. Скрипты могут выполнять самые разные задачи – от автоматизации рутинных действий системного администратора до реализации сложных алгоритмов для ИТ инфраструктуры. При этом результаты работы команд могут служить входными данными для других задач (команд).
Для того, чтобы превратить файл с набором команд в скрипт, понадобятся две вещи. Во-первых, в первой строке пустого файла необходимо прописать путь к командной оболочке, которая будет исполнять данный файл. В большинстве дистрибутивов Linux данной оболочкой является Bash, и соответственно первой строкой будет #!/bin/bash. В других строках символ решетки используется для обозначения комментариев, которые не будут обработаны оболочкой. Однако, первая строка — это особый случай, здесь решетка, за которой следует восклицательный знак (эту последовательность называют шебанг) и путь /bin/bash, указывают системе что данный скрипт создан именно для оболочки bash. Во вторых, чтобы скрипт запустить как исполняемый файл, ему необходимо дать права на исполнение, иначе, попытка его запуска даст ошибку Permission denied.
Пример ошибки, когда запускается неисполняемый файл:
[rustam@dushanbe ~]$ ./filename.sh -bash: ./filename.sh: Permission denied
Права на исполнение даются командой chmod. Например,
chmod +x filename.sh
Данная команда дает всем пользователям операционной системы право на запуск файла с именем filename.sh
Право на запуск того же файла только владельцу можно дать следующей командой: chmod u+x filename.sh.
Расширение .sh не обязательно, но таким образом легче определять, какой файл является скриптом.
Ниже рассматривается пример написания простейшего скрипта, копирующего все файлы из папки /home/rustam/Documents в папку /tmp/backup.
#!/bin/bash # Скрипт копирует файлы в папку /tmp/backup/ echo “Сейчас начнется копирование…” cp /home/rustam/Documents/* /tmp/backup/
При работе со скриптами могут использоваться переменные. Они позволяют хранить в файле сценария различную информацию, например, результаты работы одних команд для дальнейшего их использования для других команд.
Исполнение отдельных команд без хранения результатов работы ограничивают их возможности.
Существуют два типа переменных, которые используются в bash-скриптах:
Используются при необходимости работы с системными данными в командах оболочки. Например, требуется вывести домашнюю директорию текущего пользователя. Список переменных для среды конкретного пользователя выдается командой env.
echo "Home for the current user is: $HOME"
Можно использовать системную переменную $HOME в двойных кавычках, что не помешает ее распознаванию системой.
В дополнение к переменным среды, bash-скрипты позволяют задавать и использовать в скрипте свои собственные переменные. Подобные переменные хранят значение до тех пор, пока не завершится выполнение сценария. Как и в случае с системными переменными, к пользовательским переменным обращаются используя знак доллара:
#!/bin/bash age=34 name="Rustam" echo "$name is $age years old"
Дополним соответствующим образом скрипт, написанный ранее – добавляется переменная для хранения пути к папке, в которую осуществляется копирование.
#!/bin/bash # Скрипт копирует файлы в папку /tmp/backup/ # В переменной dest_dir хранится путь к папке, который подставляется в команду ниже dest_dir="/tmp/backup/" echo “Сейчас начнется копирование…” cp /home/rustam/Documents/* $dest_dr
2. Что такое планировщик заданий. Работа сервиса cron.
Часто возникают ситуации, в которых приходится автоматизировать различные задачи по обслуживанию и работе с Linux с помощью скриптов. В этом случае удобно, если скрипт выполняет необходимые команды без участия пользователя. Для этого настраивается автоматический запуск требуемого скрипта в заданное время.
Для указанной настройки в Linux используется системный сервис cron. Это планировщик, который позволяет выполнять необходимые скрипты раз в час, раз в день, неделю или месяц, а также в любое заданное время или через любой интервал времени. Сервис cron также часто используется другими службами операционной системы.
Как и большинство других сервисов Linux, cron запускается при старте системы и работает в фоновом режиме. Его основная задача – выполнять требуемые процессы в заданное время. Существует несколько конфигурационных файлов, из которых берется информация о том, что и когда нужно выполнять. Cron открывает файл /etc/crontab, в котором указываются необходимые данные.
Для настройки времени, даты и интервала выполнения задания, используется специальный синтаксис файла cron и специальная команда. Не рекомендуется непосредственно редактировать файл /etc/crontab. Вместо этого используется команда crontab. Ниже запускается команда crontab с ключом –e для редактирования файла
Рекомендуется ее выполнять с опцией -e, тогда для редактирования правил используется текстовый редактор по умолчанию. После выполнения команды открывается временный файл, в котором записаны текущие правила cron и есть возможность добавлять новые. Добавленные правила запускаются именно от того пользователя, от имени которого они были добавлены.
Файлы crontab, используемые для управления работой планировщика, располагаются в каталоге /etc/cron.d/. Кроме того, в каталогах /etc/cron.daily/, /etc/cron.weekly/ и /etc/cron.monthly/ размещаются автоматически запускаемые программы (ежедневно, еженедельно или ежемесячно).
Вывод содержимого текущего файла позволяет команда:
Таблица crontab состоит из 6 колонок, которые разделяются пробелами или табуляторами. Первые пять колонок отвечают за время выполнения, соответственно, минута, час, день месяца, месяц, день недели. В них может находиться: число, список чисел (1,2,3), диапазон чисел (1-3), символы * или /. Все остальные символы в строке интерпретируются как выполняемая команда с ее параметрами – можно указать как саму команду (например, echo “Доброе утро”), так и путь к исполняемому скрипту.
Как запускать скрипты через cron
Скрипты запускаются через cron, указанием команды либо пути к скрипту в последней колонке.
Обязательно требуется прописывать полный путь к команде, так как для команд, запускаемых от имени сервиса cron, переменная пользовательской среды PATH будет отличаться, и сервис не сможет найти команду.
Пример запуска ранее созданного скрипта filename.sh, который копирует файлы каждый день в 23:00:
0 23 * * * /home/rustam/filename.sh
или копирует файлы каждые 5 минут:
0 23 * * * /home/rustam/filename.sh
3. Примеры
Ниже приведены примеры настройки и работы cron:
0 17 * * 1-5 echo “Рабочий день закончен – эта надпись выводится в 17:00 с понедельника по пятницу”
15 6 * * sun echo “Выполняется в 6:15 в воскресенье”
30 12,13 * * 1,3 echo “Эта надпись выводится в понедельник и среду в 12:30 и 13:30”
0-59 * * * * echo “Выполняется ежеминутно”
How to Schedule a Task in Linux?
In Linux, sometimes tasks are performed repeatedly because running them manually is time-consuming and unskilled. For that purpose, Linux OS has a built-in task scheduler, crontab, and at command. It is just like an Asynchronous approach to programming which means a certain task or command will be executed within a given specific time.
This article will demonstrate methods of scheduling a task in Linux. The content for this post is as follows:
Let’s start with the first method.
Method 1: Schedule a Task Using cron Job
The first method for scheduling the task is by using the cron job. It is the job run by the cron daemon at the scheduled time given by the user. To check the scorn service in Linux, run the following command in the terminal:
$ sudo systemctl status cron.service
The cron service status is active and running.
To schedule the cron job in Linux, “crontab” with the “-e” flag will be used. Let’s check it in the terminal:
Users can use this file to add, edit, update or delete a job. If we read the above lines, which describe the functionalities that can be done through this file.
The syntax for the cron job is given below:
$ [Minutes] [Hours] [Day_of_Month] [Month] [Day_of_Week] [Command]
The values for the minutes are 0 to 59, hours 0 to 23, days of the month 1 to 31, months 1 to 12, and days of the week 0 to 6.
“*” can be used for all possible units such as every minute, every hour, etc.
Example: Printing Date and Time After Every Minute
Let’s implement an example in which we have a “script.sh” file that prints the current date and time and redirects its output to the “date.txt” file. We can schedule the time in which this file executes automatically and will print the current date and time after every minute:
To do so, add the following line in the crontab:
Save the file by pressing “Ctrl+O” and exit from the editor using “Ctrl+x”.
Let’s check the output of the date.txt file after a few minutes:
The current date and time are printed in the file after every minute.
You can assign tasks in minutes, hourly, daily, weekly, or monthly.
- For Every Minute: * * * * *
- For Hourly: 0 * * * * ( once an hour)
- For Daily: 0 0 * * * (once a day)
- For Weekly:0 0 * * 0 (once a week)
- For Weekly:0 0 1 * * (once a month)
Lets’ move toward the method 2.
Method 2: Schedule a Task Using “at” Command
Another support for scheduling a task in Linux is using the command. The “at” command is a utility to schedule the command or task at a specific time. In most Linux distributions, it is pre-installed. Still, it can be installed using the following command in case of no availability:
For CentOS/RHEL
For Arch
For Fedora
Let’s implement a task using an example,
Example: Scheduling echo Command After Specific Time
In the below example, we are scheduling a task of printing the current date and time after 5 minutes using at command.
Save the job by pressing “Ctrl+D”, and the command will be executed automatically after 5 minutes.
Now, let’s check the output of the “output.txt” file:
The current date and time are printed on the given time.
Bonus Tip: How To Delete a Job at Command?
To delete the job of the “at” command, use the “-r” flag with at command or “at -r” with the job number. We have one job in the queue that can be tested using the given command:
Let’s remove it by running the given command:
The successful execution of the command shows that job 8 is removed.
That’s how you can schedule a task in Linux.
Conclusion
To schedule a job in Linux, there are two methods: using a cron job or the “at” utility. Both are built-in support of Linux. This post has illustrated the two most efficient methods of scheduling a task in Linux. Apart from that, the removal method of the job using at command has also been covered in this write-up.