- Ctrl + C, Ctrl + D, Ctrl + Z
- Обработка событий прерывания Ctrl + C в Linux
- Решение
- Другие решения
- Что делать, если Ctrl + C не может убить процесс?
- 9 ответов
- Ctrl + C обработка событий прерывания в Linux
- 3 ответов
- Bash-скрипты, часть 5: сигналы, фоновые задачи, управление сценариями
- Сигналы Linux
- Отправка сигналов скриптам
- Завершение работы процесса
- Временная остановка процесса
- Перехват сигналов
- Перехват сигнала выхода из скрипта
- Модификация перехваченных сигналов и отмена перехвата
- Выполнение сценариев командной строки в фоновом режиме
- Выполнение скриптов, не завершающих работу при закрытии терминала
- Просмотр заданий
- Перезапуск приостановленных заданий
- Планирование запуска скриптов
- Удаление заданий, ожидающих выполнения
- Запуск скриптов по расписанию
- Запуск скриптов при входе в систему и при запуске оболочки
- Итоги
Ctrl + C, Ctrl + D, Ctrl + Z
Комбинации клавиш Ctrl + C, Ctrl + D и Ctrl + Z часто используются в терминале для выхода из программы, работающей на переднем плане (foreground), и передачи управления Bash.
Ctrl + C выполняет прерывание процесса. По-сути убивает его. Результат действия Ctrl + D такой же. Однако разница между этими двумя способами выхода есть, и заключается она во внутреннем механизме.
Нажатие Ctrl + C заставляет терминал послать сигнал SIGINT процессу, который на данный момент его контролирует. Когда foreground-программа получает сигнал SIGINT, она обязана прервать свою работу.
Нажатие Ctrl + D говорит терминалу, что надо зарегистрировать так называемый EOF (end of file – конец файла), то есть поток ввода окончен. Bash интерпретирует это как желание выйти из программы.
При работе в конкретной программе могут срабатывать оба способа, но может только один. Так команда cat без параметров запускается в интерактивном режиме, в котором то, что вы ввели, будет тут же выводиться на экран после нажатия Enter. Выйти из программы можно как с помощью Ctrl + С, так и Ctrl + D.
Выйти из интерпретатора Питона с помощью Ctrl + C нельзя.
Комбинация клавиш Ctrl + Z посылает процессу сигнал, который приказывает ему остановиться. Это значит, что процесс остается в системе, но как бы замораживается. Само собой разумеется он уходит в бэкграунд (background) – в фоновый режим. С помощью команды bg его можно снова запустить, оставив при этом в фоновом режиме. Команда fg не только возобновляет ранее приостановленный процесс, но и выводит его из фона на передний план.
На скриншоте сначала запускается интерпретатор Питона. Далее его работа останавливается с помощью Ctrl + Z. Командой fg python3 мы возобновляем работу приложения и делаем его текущим. То, что мы вернулись в тот же самый процесс, видно по переменной a , значение которой остается доступным.
С помощью команды ps можно посмотреть процессы текущего сеанса Bash (используя ключи можно просматривать и другие процессы). А команда kill позволяет удалять ненужные.
Здесь запускается cat и приостанавливается. Далее смотрим список процессов. Ключ -9 команды kill обозначает, что мы хотим полностью избавиться от процесса. В качестве аргумента передается идентификационный номер процесса (PID).
Отметим, что во многих консольных программах управляющие комбинации с клавишей Ctrl обычно обозначаются как ^C, ^Z и т. п. То есть вместо Ctrl используется знак ^.
Также обратим внимание, что понятие «процесса» связано с понятием «одновременного выполнения нескольких программ». Процесс – это выполняющаяся программа, а точнее экземпляр выполняющейся программы, потому что в системе может существовать несколько процессов, запущенных на основе одной программы. Ядром операционной системы создается видимость одновременного выполнения множества процессов.
При необходимости системный администратор может запускать процессы, требующие длительного выполнения, в бэкграунде, а на «переднем плане» выполнять другие команды. Запустить процесс в фоне можно с помощью знака амперсанда &, который записывается в конце команды.
Если в текущем терминале было запущено и переведено в фон несколько одноименных процессов, то сделать один из них текущим с помощью команды fg имя_программы не получится. PID также не используется как аргумент для fg. Здесь используется идентификатор процесса, который возвращает команда jobs. Причем для fg его надо использовать в формате %ID.
Выполните команды sleep 10m и sleep 10s , каждую остановите с помощью Ctrl + Z. Посмотрите идентификаторы процессов с помощью jobs. Выведите из бэкграунда десятисекундный слип. Учитывалось ли время, когда процесс был остановлен? После этого сделайте текущим десятиминутный слип и прервите его.
Курс с ответами к заданиям и дополнительными уроками:
android-приложение, pdf-версия.
Источник
Обработка событий прерывания Ctrl + C в Linux
Я занимаюсь разработкой приложения, которое использует C ++ и компилирует с использованием Linux GNU C Compiler. Тем не менее, я хочу вызвать функцию, так как пользователь прерывает сценарий с помощью Ctrl С ключи. Что я должен делать? Любые ответы будут высоко оценены.
Решение
Когда вы нажимаете Ctr + C , операционная система отправляет сигнал к процессу. Есть много сигналов, и один из них — SIGINT. SIGINT («программное прерывание») является одним из сигналов завершения.
Существует еще несколько видов сигналов завершения, но в SIGINT интересно то, что он может обрабатываться (перехватываться) вашей программой. Действие SIGINT по умолчанию — завершение программы. То есть, если ваша программа специально не обрабатывает этот сигнал, когда вы нажимаете Ctr + C ваша программа завершается как действие по умолчанию.
Чтобы изменить действие сигнала по умолчанию, вы должны зарегистрировать сигнал, который нужно поймать. Для регистрации сигнала в программе на C (по крайней мере, в системах POSIX) есть две функции
Эти функции требуют заголовка signal.h быть включенным в ваш код C У меня есть простой пример signal Функция ниже с комментариями.
Вы можете скомпилировать этот код с помощью gcc и выполнить его из оболочки. В коде есть бесконечный цикл, и он будет работать, пока вы не отправите SIGINT сигнал нажатием Ctr + C .
Другие решения
Typing Ctrl С обычно вызывает отправку оболочки SIGINT к вашей программе. Добавить обработчик для этого сигнала (через signal(2) или же sigaction(2) ), и вы можете делать то, что вам нравится, когда Ctrl С нажата.
С другой стороны, если вам нужно только выполнить очистку перед выходом из вашей программы, настройте обработчик выхода с помощью atexit(3) может быть более подходящим.
Источник
Что делать, если Ctrl + C не может убить процесс?
Ctrl + C не всегда работает, чтобы убить текущий процесс (например, если этот процесс занят в определенных сетевых операциях). В этом случае вы просто видите «^ C» своим курсором и больше не можете делать.
Какой самый простой способ заставить этот процесс умереть сейчас, не теряя моего терминала?
Резюме ответов: Обычно вы можете Ctrl + Z перевести процесс в режим сна, а затем выполните kill -9 _process-pid_ , где вы найдете pid с ps и другими инструментами. На Bash (и, возможно, другие оболочки) вы можете сделать kill -9 %1 (или ‘% N’ вообще), что проще. Если Ctrl + Z не работает, вам придется открыть другой терминал и kill .
9 ответов
Чтобы понять, почему Ctrl + C не работает, очень полезно понять, что происходит, когда вы нажимаете его:
Большинство оболочек связывают Ctrl + C , чтобы отправить SIGINT для программы, которая в настоящее время выполняется на переднем плане ». Вы можете прочитать о различных сигналах через сигнал человека :
Программы могут игнорировать этот сигнал, так как они могут игнорировать SIGTSTP :
(Это то, что делают большинство оболочек, когда вы нажимаете Ctrl + Z , поэтому не гарантируется работа.)
Есть некоторые сигналы, которые не могут быть проигнорированы процессом: SIGKILL , SIGSTOP и некоторые другие. Вы можете отправить эти сигналы с помощью команды kill . Итак, чтобы убить ваш процесс висит /зомбировать, просто найдите идентификатор процесса (PID). Например, используйте pgrep или ps , а затем kill it:
Если Ctrl + C (SIGINT) не работает, попробуйте Ctrl + \ (SIGQUIT) , Затем попробуйте Ctrl + Z (SIGTSTP). Если это возвращает вас к приглашению оболочки, выполните kill идентификатор процесса. (По умолчанию это сигнал SIGTERM, который вы можете указать с помощью kill -TERM . В некоторых оболочках вы можете использовать %1 для ссылки на PID.) Если это не сработает, перейдите на другой терминал или сеанс SSH и выполните kill или kill -TERM идентификатор процесса. Только в качестве последнего средства следует выполнить kill -KILL , aka kill -9 , так как это не дает процессу возможности прервать очистить свои открытые файлы, удалить его временные файлы, закрыть сетевые подключения и т. д.
(Восстановить на передний план снова с помощью fg )
Затем вы можете kill или kill -9 его, учитывая его идентификатор процесса (вы получаете это из ps a )).
Ctrl + Z : приостановить процесс.
Ctrl + C : вежливо попросить процесс завершить работу.
Ctrl + \ : беспощадно убить процесс, который сейчас находится на переднем плане
Обычно вы можете остановить процесс ( Ctrl + Z ), а затем использовать kill -9 . Для kill -9 сначала необходимо процесс PID . Для фоновых заданий kill -9 %1 — это самый простой способ сделать это — если вы не знаете, какое количество фоновых заданий вы хотите убить, запустите jobs .
В качестве альтернативы вы можете найти идентификатор процесса с помощью
Затем вы можете запустить
1) Если вы находитесь на консоли и в многопользовательском режиме, вы можете нажать CTRL-ALT-Fn и войти на другой экран, используйте ps -ef | grep или pidof , а затем убить -9 процесс по идентификационному номеру.
2) Если вы подключены удаленно, выполните то же самое через другой сеанс терминала.
Вы также можете немного облегчить жизнь, установив htop , который является более универсальной версией что позволяет выборочно убивать запущенные процессы. Большинство дистрибутивов имеют htop в репо.
3), если вы просто застряли в проверенной сессии ssh (например, в другой системе), попробуйте нажать кнопку тильды (
), которая является клавишей эвакуации, а затем нажмите CTRL-Z, чтобы вернуться к сеансу хоста , то вы можете убить застрявший процесс ssh или дождаться его таймаута, который больше всего делает после периода бездействия.
Более простое решение для Bash (и других оболочек?):
где «% 1» означает, что номер задания убит. Это может быть «% 2» (или что-то еще), если у вас уже есть другие задания. Вы можете видеть, какой номер задания он имеет, когда вы нажимаете Ctrl-z:
Обратите внимание, что «kill» — это версия kill, а не /bin /kill.
Если вы используете tmux или screen, и ни одно из вышеперечисленных действий не работает, вы все равно можете убить панель с помощью
x , тогда процесс также будет убит.
Возможно, в вашем /etc /profile есть ловушка с SIGINT (2). Если это так, удалите его. Выйдите из системы и войдите в систему, и вы должны быть хорошими.
Источник
Ctrl + C обработка событий прерывания в Linux
Я разрабатываю приложение, которое использует C++ и компилирует с помощью Linux GNU C Compiler. Однако я хочу вызвать функцию, поскольку пользователь прерывает скрипт с помощью Ctrl C ключи. Что мне делать? Любые ответы будут высоко оценены.
3 ответов
при нажатии клавиши Ctr + C операционная система передает сигнал для процесса. Существует много сигналов, и один из них-SIGINT. SIGINT («прерывание программы») является одним из сигналов завершения.
есть еще несколько видов сигналов завершения, но интересная вещь о SIGINT заключается в том, что она может быть обработана (поймана) вашей программой. Действие SIGINT по умолчанию-завершение программы. То есть, если ваша программа не специально обрабатывать этот сигнал, когда вы нажимаете Ctr + C ваша программа завершается как действие по умолчанию.
чтобы изменить действие по умолчанию сигнала, вы должны зарегистрировать сигнал, который будет пойман. Для регистрации сигнала в программе C (по крайней мере, в системах POSIX) есть две функции
эти функции требуют заголовка сигнал.h быть включенным в ваш код C. Я привел простой пример ниже с комментариями.
вы можете скомпилировать этот код с помощью GCC и запустить его из оболочки. Есть бесконечный цикл в коде, и он будет работать, пока вы не отправить SIGINT сигнал при нажатии клавиши!—4—>Ctr + C.
введя Ctrl C обычно вызывает оболочку для отправки SIGINT в вашей программе. Добавьте обработчик для этого сигнала (через signal(2) или sigaction(2) ), и вы можете делать то, что вам нравится, когда Ctrl C нажата.
в качестве альтернативы, если вы заботитесь только о выполнении очистки до выхода вашей программы, настройка обработчика выхода через atexit(3) может быть более подходящим.
Источник
Bash-скрипты, часть 5: сигналы, фоновые задачи, управление сценариями
В прошлый раз мы говорили о работе с потоками ввода, вывода и ошибок в bash-скриптах, о дескрипторах файлов и о перенаправлении потоков. Сейчас вы знаете уже достаточно много для того, чтобы писать что-то своё. На данном этапе освоения bash у вас вполне могут возникнуть вопросы о том, как управлять работающими скриптами, как автоматизировать их запуск.
До сих пор мы вводили имена скриптов в командную строку и нажимали Enter, что приводило к немедленному запуску программ, но это — не единственный способ вызова сценариев. Сегодня мы поговорим о том как скрипт может работать с сигналами Linux, о различных подходах к запуску скриптов и к управлению ими во время работы.
Сигналы Linux
В Linux существует более трёх десятков сигналов, которые генерирует система или приложения. Вот список наиболее часто используемых, которые наверняка пригодятся при разработке сценариев командной строки.
Код сигнала | Название | Описание |
1 | SIGHUP | Закрытие терминала |
2 | SIGINT | Сигнал остановки процесса пользователем с терминала (CTRL + C) |
3 | SIGQUIT | Сигнал остановки процесса пользователем с терминала (CTRL + \) с дампом памяти |
9 | SIGKILL | Безусловное завершение процесса |
15 | SIGTERM | Сигнал запроса завершения процесса |
17 | SIGSTOP | Принудительная приостановка выполнения процесса, но не завершение его работы |
18 | SIGTSTP | Приостановка процесса с терминала (CTRL + Z), но не завершение работы |
19 | SIGCONT | Продолжение выполнения ранее остановленного процесса |
Если оболочка bash получает сигнал SIGHUP когда вы закрываете терминал, она завершает работу. Перед выходом она отправляет сигнал SIGHUP всем запущенным в ней процессам, включая выполняющиеся скрипты.
Сигнал SIGINT приводит к временной остановке работы. Ядро Linux перестаёт выделять оболочке процессорное время. Когда это происходит, оболочка уведомляет процессы, отправляя им сигнал SIGINT .
Bash-скрипты не контролируют эти сигналы, но они могут распознавать их и выполнять некие команды для подготовки скрипта к последствиям, вызываемым сигналами.
Отправка сигналов скриптам
Оболочка bash позволяет вам отправлять скриптам сигналы, пользуясь комбинациями клавиш на клавиатуре. Это оказывается очень кстати если нужно временно остановить выполняющийся скрипт или завершить его работу.
Завершение работы процесса
Комбинация клавиш CTRL + C генерирует сигнал SIGINT и отправляет его всем процессам, выполняющимся в оболочке, что приводит к завершению их работы.
Выполним в оболочке такую команду:
После этого завершим её работу комбинацией клавиш CTRL + C .
Завершение работы процесса с клавиатуры
Временная остановка процесса
Комбинация клавиш CTRL + Z позволяет сгенерировать сигнал SIGTSTP , который приостанавливает работу процесса, но не завершает его выполнение. Такой процесс остаётся в памяти, его работу можно возобновить. Выполним в оболочке команду:
И временно остановим её комбинацией клавиш CTRL + Z .
Число в квадратных скобках — это номер задания, который оболочка назначает процессу. Оболочка рассматривает процессы, выполняющиеся в ней, как задания с уникальными номерами. Первому процессу назначается номер 1, второму — 2, и так далее.
Если вы приостановите задание, привязанное к оболочке, и попытаетесь выйти из неё, bash выдаст предупреждение.
Просмотреть приостановленные задания можно такой командой:
В колонке S , выводящей состояние процесса, для приостановленных процессов выводится T . Это указывает на то, что команда либо приостановлена, либо находится в состоянии трассировки.
Если нужно завершить работу приостановленного процесса, можно воспользоваться командой kill . Подробности о ней можно почитать здесь.
Выглядит её вызов так:
Перехват сигналов
Для того, чтобы включить в скрипте отслеживание сигналов Linux, используется команда trap . Если скрипт получает сигнал, указанный при вызове этой команды, он обрабатывает его самостоятельно, при этом оболочка такой сигнал обрабатывать не будет.
Команда trap позволяет скрипту реагировать на сигналы, в противном случае их обработка выполняется оболочкой без его участия.
Рассмотрим пример, в котором показано, как при вызове команды trap задаётся код, который надо выполнить, и список сигналов, разделённых пробелами, которые мы хотим перехватить. В данном случае это всего один сигнал:
Команда trap , использованная в этом примере, выводит текстовое сообщение всякий раз, когда она обнаруживает сигнал SIGINT , который можно сгенерировать, нажав Ctrl + C на клавиатуре.
Каждый раз, когда вы нажимаете клавиши CTRL + C , скрипт выполняет команду echo , указанную при вызове trace вместо того, чтобы позволить оболочке завершит его работу.
Перехват сигнала выхода из скрипта
Перехватить сигнал выхода из скрипта можно, использовав при вызове команды trap имя сигнала EXIT :
Перехват сигнала выхода из скрипта
При выходе из скрипта, будь то нормальное завершение его работы или завершение, вызванное сигналом SIGINT , сработает перехват и оболочка исполнит команду echo .
Модификация перехваченных сигналов и отмена перехвата
Для модификации перехваченных скриптом сигналов можно выполнить команду trap с новыми параметрами:
Модификация перехвата сигналов
После модификации сигналы будут обрабатываться по-новому.
Перехват сигналов можно и отменить, для этого достаточно выполнить команду trap , передав ей двойное тире и имя сигнала:
Если скрипт получит сигнал до отмены перехвата, он обработает его так, как задано в действующей команде trap . Запустим скрипт:
И нажмём CTRL + C на клавиатуре.
Сигнал, перехваченный до отмены перехвата
Первое нажатие CTRL + C пришлось на момент исполнения скрипта, когда перехват сигнала был в силе, поэтому скрипт исполнил назначенную сигналу команду echo . После того, как исполнение дошло до команды отмены перехвата, команда CTRL + C сработала обычным образом, завершив работу скрипта.
Выполнение сценариев командной строки в фоновом режиме
Иногда bash-скриптам требуется немало времени для выполнения некоей задачи. При этом вам может понадобиться возможность нормально работать в командной строке, не дожидаясь завершения скрипта. Реализовать это не так уж и сложно.
Если вы видели список процессов, выводимый командой ps , вы могли заметить процессы, которые выполняются в фоне и не привязаны к терминалу.
Напишем такой скрипт:
Запустим его, указав после имени символ амперсанда ( & ):
Это приведёт к тому, что он будет запущен как фоновый процесс.
Запуск скрипта в фоновом режиме
Скрипт будет запущен в фоновом процессе, в терминал выведется его идентификатор, а когда его выполнение завершится, вы увидите сообщение об этом.
Обратите внимание на то, что хотя скрипт выполняется в фоне, он продолжает использовать терминал для вывода сообщений в STDOUT и STDERR , то есть, выводимый им текст или сообщения об ошибках можно будет увидеть в терминале.
При таком подходе, если выйти из терминала, скрипт, выполняющийся в фоне, так же завершит работу.
Что если нужно, чтобы скрипт продолжал работать и после закрытия терминала?
Выполнение скриптов, не завершающих работу при закрытии терминала
Скрипты можно выполнять в фоновых процессах даже после выхода из терминальной сессии. Для этого можно воспользоваться командой nohup . Эта команда позволяет запустить программу, блокируя сигналы SIGHUP , отправляемые процессу. В результате процесс будет исполняться даже при выходе из терминала, в котором он был запущен.
Применим эту методику при запуске нашего скрипта:
Вот что будет выведено в терминал.
Команда nohup отвязывает процесс от терминала. Это означает, что процесс потеряет ссылки на STDOUT и STDERR . Для того, чтобы не потерять данные, выводимые скриптом, nohup автоматически перенаправляет сообщения, поступающие в STDOUT и в STDERR , в файл nohup.out .
Обратите внимание на то, что при запуске нескольких скриптов из одной и той же директории то, что они выводят, попадёт в один файл nohup.out .
Просмотр заданий
Команда jobs позволяет просматривать текущие задания, которые выполняются в оболочке. Напишем такой скрипт:
И временно остановим комбинацией клавиш CTRL + Z .
Запуск и приостановка скрипта
Запустим тот же скрипт в фоновом режиме, при этом перенаправим вывод скрипта в файл так, чтобы он ничего не выводил на экране:
Выполнив теперь команду jobs , мы увидим сведения как о приостановленном скрипте, так и о том, который работает в фоне.
Получение сведений о скриптах
Ключ -l при вызове команды jobs указывает на то, что нам нужны сведения об ID процессов.
Перезапуск приостановленных заданий
Для того, чтобы перезапустить скрипт в фоновом режиме, можно воспользоваться командой bg .
Нажмём CTRL + Z , что временно остановит его выполнение. Выполним следующую команду:
Теперь скрипт выполняется в фоновом режиме.
Если у вас имеется несколько приостановленных заданий, для перезапуска конкретного задания команде bg можно передать его номер.
Для перезапуска задания в обычном режиме воспользуйтесь командой fg :
Планирование запуска скриптов
Linux предоставляет пару способов запуска bash-скриптов в заданное время. Это команда at и планировщик заданий cron .
Вызов команды at выглядит так:
Эта команда распознаёт множество форматов указания времени.
- Стандартный, с указанием часов и минут, например — 10:15.
- С использованием индикаторов AM/PM, до или после полудня, например — 10:15PM.
- С использованием специальных имён, таких, как now , noon , midnight .
В дополнение к возможности указания времени запуска задания, команде at можно передать и дату, используя один из поддерживаемых ей форматов.
- Стандартный формат указания даты, при котором дата записывается по шаблонам MMDDYY , MM/DD/YY , или DD.MM.YY .
- Текстовое представление даты, например, Jul 4 или Dec 25 , при этом год можно указать, а можно обойтись и без него.
- Запись вида now + 25 minutes .
- Запись вида 10:15PM tomorrow .
- Запись вида 10:15 + 7 days .
Не будем углубляться в эту тему, рассмотрим простой вариант использования команды:
Планирование заданий с использованием команды at
Ключ -M при вызове at используется для отправки того, что выведет скрипт, по электронной почте, если система соответствующим образом настроена. Если отправка электронного письма невозможна, этот ключ просто подавит вывод.
Для того чтобы посмотреть список заданий, ожидающих выполнения, можно воспользоваться командой atq :
Список заданий, ожидающих выполнения
Удаление заданий, ожидающих выполнения
Удалить задание, ожидающее выполнения, позволяет команда atrm . При её вызове указывают номер задания:
Запуск скриптов по расписанию
Планирование однократного запуска скриптов с использованием команды at способно облегчить жизнь во многих ситуациях. Но как быть, если нужно, чтобы скрипт выполнялся в одно и то же время ежедневно, или раз в неделю, или раз в месяц?
В Linux имеется утилита crontab , позволяющая планировать запуск скриптов, которые нужно выполнять регулярно.
Crontab выполняется в фоне и, основываясь на данных в так называемых cron-таблицах, запускает задания по расписанию.
Для того, чтобы просмотреть существующую таблицу заданий cron , воспользуйтесь такой командой:
При планировании запуска скрипта по расписанию crontab принимает данные о том, когда нужно выполнить задание, в таком формате:
Например, если надо, чтобы некий скрипт с именем command выполнялся ежедневно в 10:30, этому будет соответствовать такая запись в таблице заданий:
Здесь универсальный символ « * », использованный для полей, задающих день месяца, месяц и день недели, указывает на то, что cron должен выполнять команду каждый день каждого месяца в 10:30.
Если, например, надо, чтобы скрипт запускался в 4:30PM каждый понедельник, понадобится создать в таблице заданий такую запись:
Нумерация дней недели начинается с 0, 0 означает воскресенье, 6 — субботу. Вот ещё один пример. Здесь команда будет выполняться в 12 часов дня в первый день каждого месяца.
Нумерация месяцев начинается с 1.
Для того чтобы добавить запись в таблицу, нужно вызвать crontab с ключом -e :
Затем можно вводить команды формирования расписания:
Благодаря этой команде скрипт будет вызываться ежедневно в 10:30. Если вы столкнётесь с ошибкой «Resource temporarily unavailable», выполните нижеприведённую команду с правами root-пользователя:
Организовать периодический запуск скриптов с использованием cron можно ещё проще, воспользовавшись несколькими специальными директориями:
Если поместить файл скрипта в одну из них, это приведёт, соответственно, к его ежечасному, ежедневному, еженедельному или ежемесячному запуску.
Запуск скриптов при входе в систему и при запуске оболочки
Автоматизировать запуск скриптов можно, опираясь на различные события, такие, как вход пользователя в систему или запуск оболочки. Тут можно почитать о файлах, которые обрабатываются в подобных ситуациях. Например, это следующие файлы:
Для того, чтобы запускать скрипт при входе в систему, поместите его вызов в файл .bash_profile .
А как насчёт запуска скриптов при открытии терминала? Организовать это поможет файл .bashrc .
Итоги
Сегодня мы разобрали вопросы, касающиеся управления жизненным циклом сценариев, поговорили о том, как запускать скрипты в фоне, как планировать их выполнение по расписанию. В следующий раз читайте о функциях в bash-скриптах и о разработке библиотек.
Уважаемые читатели! А вы пользуетесь средствами планирования запуска сценариев командной строки по расписанию? Если да — расскажите пожалуйста о них.
Источник