Как сделать назначенное задание скриптом

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

Частенько спрашивают как в Windows сделать запуск файла \ программы каждую минуту или пять минут, или вообще какого либо времени. Разберем это на примере bat файла.

Для начала переходим в планировщик заданий, который можно найти на панели управления и создаем новое простое задание:

Как-нибудь называем, чтобы потом было не сложно найти задание если что, я назвал sentinel:

В открывшемся окне переходим на вкладку Триггеры:

И изменяем наше задание (двойной клик либо выделить и нажать изменить):

Если нужно остановить выполнение, то необходимо найти наш процесс (я его назвал sentinel) во всех заданиях и остановить либо удалить.

В данном посте обсуждаются базовые принципы написания скриптов и работа планировщика заданий в Oracle Linux. Рассматриваются следующие вопросы:

1. Скрипты в ОС Linux

Скрипты в ОС на базе Linux – это набор команд, записанных в файл. Это делается с целью быстрого и удобного вызова последовательности этих команд. Скрипты могут выполнять самые разные задачи – от автоматизации рутинных действий системного администратора до реализации сложных алгоритмов для ИТ инфраструктуры. При этом результаты работы команд могут служить входными данными для других задач (команд).

Пример ошибки, когда запускается неисполняемый файл:

Права на исполнение даются командой chmod. Например,

chmod +x filename.sh

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

Право на запуск того же файла только владельцу можно дать следующей командой: chmod u+x filename.sh.

Расширение .sh не обязательно, но таким образом легче определять, какой файл является скриптом.

Ниже рассматривается пример написания простейшего скрипта, копирующего все файлы из папки /home/rustam/Documents в папку /tmp/backup.

При работе со скриптами могут использоваться переменные. Они позволяют хранить в файле сценария различную информацию, например, результаты работы одних команд для дальнейшего их использования для других команд.

Исполнение отдельных команд без хранения результатов работы ограничивают их возможности.

Существуют два типа переменных, которые используются в bash-скриптах:

Используются при необходимости работы с системными данными в командах оболочки. Например, требуется вывести домашнюю директорию текущего пользователя. Список переменных для среды конкретного пользователя выдается командой env.

Можно использовать системную переменную $HOME в двойных кавычках, что не помешает ее распознаванию системой.

В дополнение к переменным среды, bash-скрипты позволяют задавать и использовать в скрипте свои собственные переменные. Подобные переменные хранят значение до тех пор, пока не завершится выполнение сценария. Как и в случае с системными переменными, к пользовательским переменным обращаются используя знак доллара:

Дополним соответствующим образом скрипт, написанный ранее – добавляется переменная для хранения пути к папке, в которую осуществляется копирование.

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:

или копирует файлы каждые 5 минут:

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”

Каждому системному администратору Windows приходилось создавать задания планировщика из графической консоли Task Scheduler. Это довольно простая и тривиальная задача. В этой небольшой статье мы рассмотрим, как создавать задания планировщика с помощью команд PowerShell.

Предположим, нам нужно создать задачу, которая будет запускать определённый скрипт PowerShell каждый понедельник и четверг в 11:00.

Для создания нового задания мы воспользуемся командлетами модуля PSScheduledJob. Чтобы этот командлет работал в Windows 7, нужно установить как минимум PowerShell версии 3.0.

Запустим консоль Powesrhell с правами администратора и импортируем модуль PSScheduledJob.

Создадим новый триггер:

$Trigger = New-JobTrigger -Weekly -DaysOfWeek 1,4 -At 11:00PM

Теперь создадим новое задание с именем BackupDBTask и привяжем к нему созданный ранее триггер:

Register-ScheduledJob -Name BackupDBTask -FilePath "C:\ps\backupdb.ps1" -Trigger $Trigger

Register-ScheduledJob

Задание планировщика создано. Найти его в графической консоли Task Scheduler можно в разделе: Task Scheduler -> Task Scheduler Library -> Microsoft->Windows ->PowerShell -> SheduledJobs.

Windows -PowerShell - SheduledJobs

При создании нового задания PowerShell генерирует новый xml файл, который содержит определение задания. Найти этот файл можно в профиле текущего пользователя:

В дальнейшем данный xml файл можно использовать для импорта настроек задания на других компьютерах. Импорт (создание задания с настройками из xml) выполняется такой командой:

Register-ScheduledTask -Xml (Get-Content '\\srv1\ScheduledJobDefinition.xml' | out-string) -TaskName "BackupDBTask"

В каталоге Output хранится история запуска задания.

AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\

В Windows 8 / Windows Server 2012 и выше (в этих версиях появился встроенный PowerShell 3.0) при создании задания планировщика импортировать модуль PSScheduledJob не нужно.

Просто создайте новый триггер:

$Trigger = New-JobTrigger -Weekly -DaysOfWeek 1,4 -At 08:00PM

Если нужно запускать задание от определенного пользователя, нужно получить его пароль (он будет сохранен в менеджере паролей, что конечно, не очень безопасно):

$credent = Get-Credential contoso\server-admin1

Чтобы задание запускалось с повышенными правами, включим флаг RunElevated:

$elevat = New-ScheduledJobOption –RunElevated

Теперь создадим новое задание

Register-ScheduledJob -Name BackupDBTask2 -FilePath C:\ps\backupdb.ps1 -Trigger $Trigger -Credential $credent –ScheduledJobOption $elevat

запусить задание планировщика с повышенными правами

Получить информацию о всех включенных заданиях в разделе Microsoft\Windows\Powershell можно так:

Get-ScheduledTask -TaskPath \Microsoft\Windows\Pow*| ? state -ne Disabled

Планировщик Windows служит для запуска программ по расписанию или в ответ на какие-то события.Запускаться может практически все что угодно, но чаще всего запускают различные скрипты, например powershell.

Планировщик Windows находится в панели управления в разделе “Система и безопасность”-”Администрирование”-”Расписание выполнения задач”.

Расписание выполнения задач

Создадим задание на запуск скрипта при каждом запуске компьютера. Для этого необходимо иметь файл скрипта для запуска. Воспользуемся кнопкой “Создать задачу” в меню “Действия” в правой части экрана.

Создание задачи

На первой вкладке введем имя задачи. при желании также можно ввести ее развернутое описание. Укажем от какого пользователя она будет выполняться, должна ли выполняться только после входа в систему (выполнять для пользователей вошедших в систему) или вообще для всех пользователей. Обратите внимание что если запускаемые программы используют сетевые диски и папки, то необходимо указать пароль к учетной записи от которой будет запускаться задача. Выполнить с наивысшими правами означает “Запускать от имени администратора”. Также можно сделать чтобы задача вообще не отображалась при запуске - так называемая скрытая задача.

Правила для всех пользователей

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

Расписание запуска

Обратим внимание что в меню “Начать задачу” есть различные типы запуска задачи: по расписанию, при простое, при входе в систему и т.д.

Начало задачи

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

Выбор программы для запуска

На вкладке условия можно задать дополнительные условия работы задачи - например “Запускать только при питании от сети” - актуально для устройств которым нужна экономия питания - например ноутбуки - “разбудить компьютер для запуска задания” и т.д.

Дополнительные условия работы задачи

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

Дополнительные параметры

После нажатия кнопки готово задание создастся и помещается в библиотеку планировщика заданий. Здесь можно им управлять (запускать, останавливать, редактировать, включать/выключать и т.д.).

Библиотека планировщика задач

Также у планировщика есть и другие функции - например импорт/экспорт заданий, ведение журналов запуска, создание простый заданий (задаются только имя, описание, программа, пользователь и расписание) и так далее.

Читайте также: