Создание своего скрипта автозапуска при загрузке компьютера. Создание и запуск скрипта Linux создание скрипта запуска приложения

Создаём пустой файл.

Первой строкой пишем:

#!/bin/sh

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

Сохраним его под оригинальным названием (чтоб не совпадал с уже существующими) в каталоге /usr/sbin/.

Чтобы скрипт запускался при загрузке, необходимо прописать его в файле /etc/rc.local до строчки exit 0. Если у вас не существует данного файла, создайте его и вставьте в него следующее содержимое:

#!/bin/sh -e #Здесь вставляем строку с указанием вашего скрипта. /usr/sbin/mescripts exit 0

Немного более сложный способ

Позволяет задать последовательность загрузки и поведение скрипта при разных runlevel"ах.

Изучаем /etc/init.d/skeleton , на его основе создаем скрипт /etc/init.d/my_script , которым будет запускаться/останавливаться наше приложение.

В этих директориях лежат скрипты остановки сервисов:

/etc/rc0.d/ /etc/rc1.d/ /etc/rc6.d/

в этих - скрипты запуска сервисов:

/etc/rc2.d/ /etc/rc3.d/ /etc/rc4.d/ /etc/rc5.d/

Изучаем их на предмет последовательности (чем меньше первая цифра в начале скрипта, тем раньше запускается/останавливается приложение). Это может быть критично, если ваше приложение будет зависит от каких-то сервисов.

После того, как определились со скриптом запуска и очередностью, выполняем следующее:

Sudo update-rc.d my_script start 70 2 3 4 5 . stop 20 0 1 6 .

Здесь я определил, что мой скриптик должен запускаться попозже остальных(70), и останавливаться пораньше(20). Цифры 2 3 4 5 0 1 6 означают уровни загрузки.

Если что-то не понравилось - все можно удалить

Sudo update-rc.d -f my_script remove

Подробности в man update-rc.d .

Выполнение скрипта при включении/отключении сети

Есть директория /etc/network/ с поддиректориями if-down.d , if-pre-up.d , if-post-down.d , if-up.d . Если разместить скрипт в одной из этих поддиректорий, то он будет выполняться соответственно при выключении, перед включением, после выключения или при включении сети.

Другой способ - указать в файле /etc/network/interfaces одну из следующих директив: up , pre-up , post-up , down , pre-down , post-down . Например, строка

Post-up /path/to/script.sh

после включения сети выполнит скрипт script.sh . Подробнее можно почитать в man interfaces .

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

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

Набор скриптов автоматизирует процесс входа в систему и запускает PPP так что все, что вы должны сделать (от root или как член группы PPP) - дать одну команду запуска вашего соединения.

15.1 Скрипты соединения для аутентификации по имени/паролю пользователя

Если ваш ISP не требует использования PAP/CHAP, вам нужны именно эти скрипты!

Если пакет ppp установлен правильно, вы должны иметь два файла примеров. Для PPP 2.1.2 они находятся в /usr/sbin , а для PPP 2.2 они находятся в /etc/ppp/scripts . Они называются

для PPP-2. 1.2

а для PPP-2. 2

ppp-off ppp-on ppp-on-dialer

Теперь, если Вы используете PPP 2.1.2, я настойчиво прошу вас удалить файлы примеров. С ними имеются потенциальные проблемы (и не сообщайте мне, что они прекрасно работают), я использовал их очень долго (и даже рекомендовал их в первой версии этого HOWTO)!

Для пользователя PPP 2.1.2 имеется ЛУЧШАя версия шаблона, взятая из дистрибутива PPP 2.2. Я предлагаю вам скопировать и использовать эти скрипты вместо старого скрипта PPP-2.1.2.

15.2 Скрипт ppp-on

Это первый из ПАРЫ скриптов, которые фактически запускают соединение.

#!/bin/sh # # Скрипт для инициации соединения PPP. Это первая часть из пары скриптов. # Это не секретные скрипты, так как коды видны командой ps. # Однако это пример. # # Это параметры. Измените их как нужно. TELEPHONE=555-1212 # Телефонный номер соединения ACCOUNT=george # Имя пользователя для входа ("George Burns") PASSWORD=gracie # Пароль для этого аккаунта (и "Gracie Allen") LOCAL_IP=0.0.0.0 # Локальный IP адрес, если известен. Динамический = 0.0.0.0 REMOTE_IP=0.0.0.0 # Удаленный IP адрес, если желателен. Обычно 0.0.0.0 NETMASK=255.255.255.0 # Соответствующая сетевая маска, если нужна # # Экспортируем их, чтобы они были доступны в "ppp-on-dialer" export TELEPHONE ACCOUNT PASSWORD # # Это расположение скрипта, который звонит по телефону и регистрируется в # системе. Пожалуйста, используйте абсолютное имя файла, так как опция connect # не использует переменную $PATH. (Если это сделать, то "root" аккаунт будет # дырой в защите, так что не просите.) # DIALER_SCRIPT=/etc/ppp/ppp-on-dialer # # Инициация соединения # # exec /usr/sbin/pppd debug /dev/ttySx 38400 \ $LOCAL_IP:$REMOTE_IP \ connect $DIALER_SCRIPT

Это скрипт ppp-on-dialer:

#!/bin/sh # # Это вторая часть скрипта ppp-on. Она выполняет установку желаемого # соединения. # /usr/sbin/chat -v \ TIMEOUT 3 \ ABORT "\nBUSY\r" \ ABORT "\nNO ANSWER\r" \ ABORT "\nRINGING\r\n\r\nRINGING\r" \ "" \rAT \ "OK-+++\c-OK" ATH0 \ TIMEOUT 30 \ OK ATDT$TELEPHONE \ CONNECT "" \ ogin:--ogin: $ACCOUNT \ assword: $PASSWORD

Для PPP-2.2, сценарий ppp-off примерно такой:

#!/bin/sh ###################################################################### # # Определить прерываемое устройство. # if [ "$1" = "" ]; then DEVICE=ppp0 else DEVICE=$1 fi ###################################################################### # # Если pid файл ppp0 есть, тогда программа работает. Остановить ее. if [ -r /var/run/$DEVICE.pid ]; then kill -INT `cat /var/run/$DEVICE.pid` # # Если kill не работает, тогда нет процесса, запущенного под этим pid. # Это может также означать, что существует посторонний lock файл. # Возможно, вы захотите удалить его. if [ ! "$?" = "0" ]; then rm -f /var/run/$DEVICE.pid echo "ERROR: Removed stale pid file" exit 1 fi # # Отлично. Пусть pppd поправит свой собственный недочет. echo "PPP link to $DEVICE terminated." exit 0 fi # # для ppp0 не запущен ppp процесс echo "ERROR: PPP link is not active on $DEVICE" exit 1

15.3 Редактирование скриптов запуска PPP

Поскольку новые скрипты приходят двумя частями, мы в свою очередь отредактируем их.

Скрипт ppp-on

Вы должны будете отредактировать скрипт чтобы вставить ВАШЕ имя пользователя на вашем ISP, ВАШ пароль на вашем ISP, номер телефона вашего ISP.

Каждая из строк типа TELEPHONE= - это фактически установленные переменные shell, которые содержат информацию справа от = (исключая комментарии, конечно). Отредактируйте каждую из этих строк так, чтобы они соответствовали вашему ISP и соединению.

Также, поскольку вы устанавливаете IP адрес (если вам это нужно) в файле /etc/ppp/options , УДАЛИТЕ строку, которая говорит

$LOCAL_IP:$REMOTE_IP \

Также, удостоверьтесь, что переменная оболочки DIALER_SCRIPT указывает на полный путь и имя скрипта для дозвона, который вы фактически собираетесь использовать. Так что, если вы переместили его или переименовали скрипт, удостоверьтесь, что вы отредактировали эту строку правильно в скрипте ppp-on !

Сценарий ppp-on-dialer

Это второй скрипт, который фактически поднимает нашу ppp связь.

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

Однако, очень полезно рассмотреть это подробно так, чтобы мы поняли, что же фактически (предположительно) происходит!

15.4 Что означает скрипт chat...

Скрипт chat - последовательность пар ожидаемая строка посылаемая строка . В частности обратите внимание, что мы ВСЕГДА ожидаем что-нибудь перед тем, как пошлем что-либо.

Если мы должны послать что-то БЕЗ того, чтобы сначала получить что-нибудь, мы должны использовать пустую строку ожидания (обозначаемую "") и аналогично для ожидания чего-либо без того, чтобы посылания чего-нибудь! Также, если строка состоит из нескольких слов, (например, NO CARRIER), вы должны взять строку в кавычки, чтобы chat вопринял ее как одно целое.

Строка chat в нашем шаблоне:

Exec /usr/sbin/chat -v

В вызове chat опция -v говорит, чтобы chat копировал ВЕСЬ ввод/вывод в систеный лог (обычно /var/log/messages). Как только вы убедитесь, что скрипт chat работает надежно, отредактируйте эту строку, чтобы удалить -v , чтобы не хранить ненужную информацию в вашем syslog

Это устанавливает паузу для получения ожидаемого ввода в 3 секунды. Вы можете увеличить это значение до 5 или 10 секунд, если вы используете медленный модем!

ABORT "\nBUSY\r"

Если получена строка BUSY , то операция аварийно прекращается

ABORT "\nNO ANSWER\r"

Если получена строка NO ANSWER , то операция аварийно прекращается

ABORT "\nRINGING\r\n\r\nRINGING\r"

Если (повторимся) получена строка RINGING , то операция аварийно прекращается.

Это потому, что кто-то сидит на вашей телефонной линии!

Не ожидаем ничего от модема, и послаем строку в него

OK-+++\c-OK ATH0

Это немного более сложно, поскольку использует некоторые из возможностей восстановления при ошибках chat .

What is says is... Ожидаем OK , если он не получен (потому что модем не в командном режиме), затем посылаем +++ (стандартная строка для Hayes-совместимых модемов, которая возвращает модем в командный режим) и ожидаем OK .

Затем посылаем ATH0 (строка для завершения связи модема). Это позволяет вашему скрипту справляться с вашим модемом, зависшим во время сеанса связи!

Установим паузу по времени в 30 секунд для оставшихся команд скрипта. Если вы испытываете проблемы со скриптом chat , прерывающимся из-за пауз, увеличьте это значение до 45 секунд или больше

OK ATDT$TELEPHONE

Ожидаем OK (ответ модема на команду ATH0) и набираем номер, на который мы хотим позвонить

Дожидаемся строки CONNECT (которую наш модем посылает, когда удаленные модем отвечает) и не посылаем в ответ ничего

Ogin:--ogin: $ACCOUNT

Снова, здесь мы вставляем кое-какое исправление ошибок. Ожидаем подсказку входа в систему (... ogin:), но если мы не получаем ее по истечении паузы, то посылаем возврат каретки и затем ищем подсказку входа в систему снова. Когда подсказка получена, посылаем username (сохраненное в переменной shell $ACCOUNT).

Assword: $PASSWORD

Ожидаем запроса пароля и посылаем наш пароль (аналогично сохраненный в переменной shell).

Этот скрипт chat имеет приемлемую возможность исправления ошибок. chat имеет значительно большее количество возможностей, чем показано здесь. Для подробной информации проконсультируйтесь с man chat (man 8 chat).

Запуск PPP на серверной стороне моединения

Хотя скрипт ppp-on-dialer отлично подходит для серверов, которые автоматически запускают pppd на серверной стороне как только вы зарегистрировались, некоторые серверы требуют, чтобы вы явно дали команду запуска PPP на сервере.

Если вы должны дать команду, чтобы запустить PPP на сервере, вы должны отредактировать скрипт ppp-on-dialer .

В КОНЦЕ сценария (после строки пароля) добавьте дополнительную пару ожидаемой-посылаемой строк, которая искала бы вашу подсказку регистрации в системе (отличая символы, которые имеют специальное значение в оболочке Bourne: типа $ и [ или ] (открытые и закрытые квадратные скобки).

Как только программа chat нашла командную строку оболочки, она должна выдать команду запуска ppp , требуемую для PPP сервера вашего ISP.

В моем случае, мой PPP сервер использует стандартную подсказку bash Linux

и требует, чтобы я напечатал

чтобы запустить PPP на сервере.

Хорошо бы учесть здесь некоторые ошибки, так например в моем случае я использую

Hartr--hartr ppp

Это значит, что если мы не получили подсказку в течении заданной паузы, то посылаем возврат каретки и ищем подсказку снова.

Как только подсказка получена, посылаем строку ppp .

Не забудьте добавить \ к концу предыдущей строки, так что бы chat думал, что весь сценарий chat состоит из одной строки!

К сожалению, на некоторых серверах набор подсказок часто меняется!

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

15.5 Сценарий chat для соединения PAP/CHAP

Если ваш ISP использует PAP/CHAP, то ваш сценарий chat намного более простой.

Весь ваш сценарий chat должен делать вот что: звонить по номеру телефона, ждать соединения и затем позволить pppd обработать регистрацию в системе!

#!/bin/sh # # This is part 2 of the ppp-on script. It will perform the connection # protocol for the desired connection. # exec /usr/sbin/chat -v \ TIMEOUT 3 \ ABORT "\nBUSY\r" \ ABORT "\nNO ANSWER\r" \ ABORT "\nRINGING\r\n\r\nRINGING\r" \ "" \rAT \ "OK-+++\c-OK" ATH0 \ TIMEOUT 30 \ OK ATDT$TELEPHONE \ CONNECT "" \

15.6 Отладка pppd и опция file option_file

Как мы уже видели, вы можете включить отладочную информацию опцией -d в pppd . Опция debug эквивалентна ей.

Поскольку мы устанавливаем новое соединение с новым скриптом, сейчас поставьте опцию отладки.

Если у вас мало дискового пространства, то логи pppd могут быстро увеличить ваш файл syslog и создать вам проблему.

Как только вы обрадуетесь, что все работает правильно, можете удалить эту опцию.

Если вы назвали ваш ppp файл опций как-нибудь иначе, чем /etc/ppp/options , или /etc/ppp/options.ttySx , определите имя файла опцией file в pppd , например

Exec /usr/sbin/pppd debug file options.myserver /dev/ttyS0 38400 \

Если Вы ещё не знаете про pCloud, то можете почитать .

PCloud для Linux предлагает приложение синхронизации для Linux в виде appimage (самую свежую версию можно ). Решение на первый взгляд простого вопроса автоматизации процесса "запуск клиента – синхронизация – выключение клиента" привело к необходимости решения нескольких задач, связанных с особенностями работы клиента pCloud. Решение приводится применительно к графическому окружению xfce.

В конечном счёте решение по автоматизации автоматизация процесса вылилось в запуск двух или трёх заданий по расписанию (см. ).

Запуск клиента pCloud

Для запуска клиента используется простой скрипт, например pcloud1.sh

#!/bin/bash
/путь_до_файла/pcloud

А команда пользовательского задания представляет из себя

Export DISPLAY=:0 && /path/pcloud1.sh

Path – путь до скрипта pcloud1.sh

Первоначальное добавление в pcloud1.sh строки exit (завершение pcloud1.sh) не привело к желаемому результату. В диспетчере задач наблюдалось 2 процесса:

Pcloud1.sh
sh -c export DISPLAY=:0 && /path/pcloud1.sh

Чтобы pcloud1.sh "не висел" в менеджере задач был создан скрипт pcloud2.sh, запускаемые по расписанию через минуту после запуска pcloud1.sh Скрипт представляет из себя "просьбу" завершить все имеющиеся процессы с наименованием pcloud1.sh

#!/bin/bash
killall -s TERM pcloud1.sh
sleep 1 && exit

Остановка клиента pCloud

Данный скрипт, с точки зрения его создания, явился наиболее трудоёмким, что объясняется двумя причинами.

Вопрос 1. Работа клиента стала сопровождаться несколькими процессами. Например, при запуске клиента и следующим за ним автоматическим открытием всех окон в диспетчере задач можно увидеть 6 процессов pcloud:


После закрытия основного окна клиента и экземпляра менеджера файлов, отображающего содержимое облака pCloudDrive в диспетчере задач останется 5 процессов pcloud:


Так как терминальной команды для завершения работы клиента не существует, то можно применить решение по "мягкому" завершению процесса pcloud по его значению pid, то есть командой kill -15 pid_pcloud

Но если запросить pid процесса pcloud, то в результате будет получено либо 6 групп цифр, соответствующих pid процессам pcloud (пример: 16129 16103 16077 16048 16036 16032), либо 5 групп (пример: 29419 29398 29352 29324 29320). Данные значения pid будут каждый раз меняться.

Количество процессов (5 или 6) зависит от того, открыты ли у Вас все окна, открываемые автоматически при запуске клиента, либо эти окна закрыты и активен только значок состояния на подставке рабочего стола (системной панели, трее).

Возникает закономерный вопрос: а какой именно процесс необходимо выключать?

Вопрос 2. При запуске клиента pCloud автоматически открываются 2 окна, одно из которых является окном клиента, а второе экземпляром файлового менеджера, соответствующего открытому каталогу pCloudDrive, содержание которого составляет контент смонтированного в него пространства облака учётной записи pCloud, например:



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

Вопрос: и как его автоматически закрыть?

Примечание. Вопрос о закрытии открытого окна приложения pCloud не ставится, так как в xfce значок на панели (системном лотке, трее) отображает только состояние "синхронизировано" или "синхронизируется". Сведения о количестве загружаемых или скачиваемых файлов, а также скорости процесса отображаются в нижней части открытого окна приложения pCloud.

Отвечать на поставленные вопросы будем последовательно.

Ответ 1. Экспериментально было установлено, что для выхода клиента pcloud необходимо выключать процесс pcloud с самым маленьким значением pid, что соответствует процессу pCloud Drive (см. диспетчер задач). Поэтому самой трудной задачей автоматизации будет являться выборка из полученных значений наименьшего pid, чтобы потом его назначить переменной.

Как оказалось, эту задачу можно решить, по крайней мере, четырьмя способами. Кроме того, "мягкое" выключение всех процессов pcloud можно осуществить командой killall c указанием имени процесса. Так как все решения, которых набирается 5, ведут к одному и тому же результату, то ниже следует их перечисление.

1 вариант: killall -s TERM pcloud

Здесь всё понятно. Выдаётся команда на завершение всех процессов pcloud.

Следующие три способа представляют из себя ряд последовательных операций. Сначала производится получение значений pid всех экземпляров pcloud и их запись в файл (например pcloud.txt). Содержание файла представляет из себя последовательность из 5-ти или 6-ти групп цифр (см. пояснение выше). Далее "вылавливается" последняя группа (5 цифр) из полученного ряда значений pid и присваивается переменной (например VAR). Заключительное действие является выполнением команды kill -15 $VAR, что равносильно выполнению kill -15 с указанием наименьшего значения pid из файла pcloud.txt

2, 3, 4 варианты:
pidof pcloud> ~/pcloud.txt
VAR=`cat ~/pcloud.txt | grep -o *$`
kill -15 $VAR

Pidof pcloud> ~/pcloud.txt
VAR=`cat ~/pcloud.txt | awk "{print $NF}"`
kill -15 $VAR

Pidof pcloud> ~/pcloud.txt
VAR=`cat ~/pcloud.txt | rev | cut -d" " -f 1 | rev
kill -15 $VAR

Варианты 1–4 были предложены пользователи форума Linuxmint.com.ru с никами slant (2), Chocobo (3 и 4), demonlibra (1). Пользуясь случаем, хотелось бы ещё раз выразить им свою благодарность.

5 вариант

При получении списка pid процессов pcloud командой pgrep результат в файле pcloud.txt будет представлен "в столбик", то есть каждое значение pid будет располагаться в новой строке в порядке их возрастания, например:

29320
29324
29352
29398
29419

Следующим шагом будет являться присвоение переменной значения самой первой строки файла pcloud.txt

Pgrep pcloud> ~/pcloud.txt
VAR=`sed -n "1p" ~/pcloud.txt`
kill -15 $VAR

Ответ 2. Несмотря на кажущуюся простоту команды закрытия активного окна Thunar командой thunar -q (получена после выполнения в терминале thunar --help), в рассматриваемом случае она не срабатывает.

После рассмотрения дерева процессов обнаружено, что в перечне активных процессов имеется Thunar --daemon:


Закрыть открытое клиентом pCloud окно Thunar можно тремя способами:

А) завершить все активные процессы Thunar killall -s TERM /usr/bin/Thunar ;

Б) получить pid процесса Thunar, записать его в переменную и завершить его командой kill -15 значение_переменной

OUTPUT="$(pidof /usr/bin/thunar)"
kill -15 ${OUTPUT}

В) получить pid процесса Thunar, записать его в файл, присвоить переменной значение, полученное из чтения файла и завершить его командой kill -15 значение_переменной

Pidof /usr/bin/Thunar> ~/thunar.txt
VAR2=`cat ~/thunar.txt`
kill -15 $VAR2

Все варианты равнозначны. Результатом их выполнения является завершение процессов thunar --daemon и Thunar (соответствует открытому окну с содержимым каталога pCloudDrive).

По вопросу "важности" процесса thunar --daemon на англоязычном форуме была найдена информация, что на функциональность Thunar и системы в целом это существенного влияния не оказывает. Единственный минус заключается в том, что без этого процесса подсоединённый съёмный носитель (например, флэшка) автоматически смонтирован будет только при открытом окне Thunar. Если никакого экземпляра Thunar не запущено, то съёмный носитель автоматически не монтируется. В этом случае придётся открыть Thunar и осуществить монтирование вручную, например:


В любом случае после очередного запуска системы thunar --daemon будет запущен автоматически


что определяется содержанием файла

/etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml (см. --daemon)



Итого, скрипт завершения работы клиента pCloud (например pcloud3.sh) может быть следующего содержания (выбирается один вариант и один способ):

#!/bin/bash
вариант 1, 2, 3, 4, 5
sleep 5
способ а, б, с
sleep 5 && exit

Команда 5-секундной паузы slеep 5 была введена в целях тестирования скрипта для наблюдения за процессами. В рабочем скрипте её можно не использовать.

Пример пользовательского задания cron для ежедневной 40-минутной автоматической синхронизации с облаком pCloud с 21:40 до 22:20

40 21 * * * export DISPLAY=:0 && /home/user/Tools/scripts/pcloud1.sh
41 21 * * * /home/user/Tools/scripts/pcloud2.sh

Если ограничиться только скриптами запуска и выключения, то есть pcloud1.sh и pcloud3.sh, то скрипт pcloud3.sh должен выключать pcloud c процессом pid не наименьшим, а на единицу больше, то есть из полученного ряда значений, например,

28354 28355 28359 28371 28399 28426 28449 28684 ,

Должно быть выбрано второе (28355). Объясняется тем, то 28354 соответствует активному скрипту pcloud1.sh.

Соответственно, в этом случае для выключения процессов pcloud будет использоваться такой код:

Pgrep pcloud> ~/pcloud.txt
VAR=`sed -n "2p" ~/pcloud.txt`
kill -15 $VAR

Тогда пользовательское задание приобретает вид, например:

40 21 * * * export DISPLAY=:0 && /home/user/Tools/scripts/pcloud1.sh
20 22 * * * /home/user/Tools/scripts/pcloud3.sh

Для написания простого скрипта на bash , нам потребуется выполнить следующие простые действия:

Как это все работает:

первая строка нашего скрипта #!/bin/bash крайне необходима, для того, чтобы наш скрипт успешно выполнился.

вторая строка mkdir testdir создает каталог testdir

третья строка cd testdir позволяет перейти в созданный каталог testdir

команда touch в следующей строке touch file1 file2 file3 создает три файла

и последняя команда в строке нашего скрипта ls -al позволяет вывести на экран содержимое текущего каталога, в котором, благодаря предыдущей строке, появилось три пустых файла.

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

Если вы ежедневно выполняете цепочку каких-либо одинаковых команд (с постоянными параметрами) в Linux, то возможно вам имеет смысл написать такой же простой скрипт на bash , который позволит вам сэкономить ваше время и автоматизировать вашу работу.

Скрипты запускаемых служб в Linux Ubuntu располагаются в /etc/init.d

Для того, чтобы скрипт запускался автоматически во время запуска системы, надо создать символическую ссылку на скрипт и разместить её в каталоге /etc/rc.d/rcN.d, где N уровень выполнения скрипта.

Уровень 0

остановка системы (halt) - работа системы должна быть прекращена.

Уровень 1

однопользовательский режим работы - консоль восстановления.

Уровень 2

многопользовательский режим - пользователи могут работать на разных терминалах.

Уровень 3

многопользовательский сетевой режим - осуществляется настройка сети и запускаются сетевые службы.

Уровень 4

практически не используется.

Уровень 5

запуск графической подсистемы X11 - вход в систему осуществляется уже в графическом режиме.

Уровень 6

Чаще всего во время загрузки системы используются уровни загрузки 3 или 5.

Имя ссылки в каталоге /etc/rc.d/rcN.d имеет особый смысл, например: если сыылки /etc/rc.d/rcN.d/@K99cpu_t и /etc/rc.d/rcN.d/@S00cpu_t указывают на один и тот же файл /etc/init.d/cpu_t, то скрипт @K99cpu_t будет выполнять в cpu_t блок кода, соответствующий останову системы, а скрипт @S00cpu_t будет выполнять в cpu_t блок кода, соответствующий старту системы, Две цифры в начале имени символической ссылки определяют порядок запуска скриптов в каталоге /etc/rc.d/rcN.d.

Cкрипт запуска должен иметь специальный формат, например такой:

#!/bin/sh # chkconfig: - 98 02 # description: Описание процесса # processname: Имя процесса # Source function library. if [ -f /etc/init.d/functions ] ; then . /etc/init.d/functions elif [ -f /etc/rc.d/init.d/functions ] ; then . /etc/rc.d/init.d/functions else exit 0 fi KIND="Имя_сервиса" start() { echo -n $"Starting $KIND services: " daemon /usr/local/sbin/исполняемый_файл echo } stop() { echo -n $"Shutting down $KIND services: " killproc исполняемый_файл echo } restart() { echo -n $"Restarting $KIND services: " killproc исполняемый_файл daemon /usr/local/sbin/исполняемый_файл echo } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac exit $?

Главное тут в следующем, во первых скрипт должен иметь как минимум 3 возможных ключа запуска, это: start, stop, restart, поскольку именно эти основные команды используются для запуска, останова и перезапуска. Плюс ко всему к этому в самом начале файла пишутся те самые заветные цифры отвечающие за последовательность запуска:

# chkconfig: - 98 02

Где 98 это номер в последовательности запуска, а 02 это номер последовательности останова.

То есть, проще говоря, этот скрипт запуститься 98мым в последовательности очередей, а будет остановлен 2рым.

Теперь практикум.

Итак для того чтоб добавить скрипт и добавить его в автозагрузку надо произвести следующую последовательность действий:

1. Создать исполняемый скрипт по шаблону приведёному выше, заменив исполняемый_файл именем файла который надо запустить.

2. Разместить исполняемый скрипт в /etc/rc.d/init

3. Выполнить команду chkconfig --add исполняемый_скрипт

4. Выполнить команду setup или servicevonf (в зависимости от того работаете вы в графическом режиме или консоли) и выбрать службу, которая будет носить имя исполняемый_скрипт.

Выполнение скрипта при включении/отключении сети

Есть директория /etc/network/ с поддиректориями if-down.d, if-pre-up.d, if-post-down.d, if-up.d. Если разместить скрипт в одной из этих поддиректорий, то он будет выполняться соответственно при выключении, перед включением, после выключения или при включении сети.

Другой способ - указать в файле /etc/network/interfaces одну из следующих директив: up, pre-up, post-up, down, pre-down, post-down. Например, строка

post-up /path/to/script.sh

после включения сети выполнит скрипт script.sh. Подробнее можно почитать в man interfaces.

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