Linux em agent oracle как отключить загрузку

Обновлено: 05.07.2024

Когда мы настраиваем сервер, необходимо спросить себя, что нам действительно необходимо. Нужен ли нам веб-сервер или FTP-сервер, NFS-сервер или DNS-сервер, сервер базы данных или что-то другое.
В этой статье мы поговорим о некоторых ненужных приложениях и службах, которые могут быть вам без надобности, но устанавливаются по умолчанию при инсталляции системы и незаметно потребляют ваши системные ресурсы.

Сначала давайте посмотрим, какие службы работают в системе:

Теперь посмотрим на процессы, которые подключаются к портам, это можно сделать с помощью команды netstat:

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

1. smbd и nmbd

smbd и nmbd - это демон Samba Process. Действительно ли вам нужно предоставлять общий доступ к ресурсам для машин, работающих под windows? Если нет, почему эти процессы работают? Вы можете их безопасно завершить и убрать из автозагрузки.

2. Telnet

Нужна ли вам связь по протоколу Telnet (bidirectional interactive text-oriented communication) в интернете или в локальной сети? Если нет, завершайте этот процесс и исключайте его из автозагрузки.

3. rlogin

Требуется вам авторизация на удаленной машине по сети? Если нет, завершаем этот процесс и убираем из автозагрузки.

4. rexec

Remote Process Execution или rexec позволяет вам выполнять команды оболочки на удаленном компьютере. Если вам это не нужно, просто завершите процесс.

5. FTP

Вы передаете файлы через интернет? Если нет, эту службу спокойно можно отключить.

6. automount

Вам нужно автоматически монтировать различные файловые системы, чтобы подключить сетевую файловую систему? Если нет, почему этот процесс работает? Завершите процесс и уберите его из автозагрузки.

7. named

Вам нужен запущенный DNS-сервер? Тогда что мешает вам освободить занимаемые им системные ресурсы. Завершите процесс и уберите его из автозагрузки.

8. lpd

lpd - это демон принтера, который позволяет печатать с сервера. Если вы не собираетесь этого делать, он вам не нужен.

9. Inetd

Используете ли вы какие-нибудь службы inetd? Если вы запускаете отдельное приложение, такое как ssh, которое в свою очередь использует другое отдельное приложение, например Mysql, Apache и так далее, то вам не нужен inetd. Лучше отключить его автоматическую загрузку.

10. portmap

Portmap - это Open Network Computing Remote Procedure Call (ONC RPC), использующий демоны rpc.portmap и rpcbind. Если у вас работают эти процессы, значит запущен NFS-сервер. В противном случае ваши системные ресурсы расходуются напрасно.

Как завершить процесс в Linux

Для того, чтобы завершить работающий процесс в Linux, используется команда "Kill PID". Но сначала нам необходимо узнать PID процесса. Например, я хочу узнать PID процесса "cupsd":

Итак, PID процесса cupsd 1511. Для того, чтобы завершить этот процесс, используем команду:

Как отключать службы в Linux

В дистрибутивах на базе Red Hat, таких как Fedora и CentOS для отключения и включения служб используется скрипт "chkconfig".
Например, давайте отключим автозагрузку сервера Apache:

В дистрибутивах на базе Debian, таких как Ubuntu, Linux Mint, для этой цели используется скрипт update-rc.d.
Например, для отключения автозагрузки сервера Apache используется следующая команда:

Опция "-f" здесь используется для того, чтобы скрипт не запрашивал подтверждения выполнения команды.

Всем надо готовое, как автостарт сервиса под виндой, часто страдающий "неавтостартом экземпляра" без плясок с настройкой винды.

Своим идиотизмом и размером. Особенно замечательно выглядит LISTENER_HOME=/. /vikrkuma/.

Своим идиотизмом и размером. Особенно замечательно выглядит LISTENER_HOME=/. /vikrkuma/.

Дешевле написать свое нужное в 20 строк, чем разбираться с dbstart. Кстати, он и агента запустит?

ОН работает от рута?

В нем есть описания зависимостей - от чего он зависит? Так чтобы его понимала chkconfig?

В нем есть опции restart, status, force-restart, start, stop как требуется для стартового скрипта?

Он настраивает параметры ядра?

Он умеет запускать агента?

Он умеет запускать isqlplus?

Он умеет запускать Oracel Apache?

(дальше можно не перечислять)

славо богу нет - с какого перепугу прикладной софт *nix запускается от рута ?

> В нем есть описания зависимостей - от чего он зависит? Так чтобы его понимала chkconfig?

> В нем есть опции restart, status, force-restart, start, stop как требуется для стартового скрипта?
кто вам сказал что _стартовый_ скрипт обязан это уметь ?

> Он настраивает параметры ядра?
> Он умеет запускать агента?
> Он умеет запускать isqlplus?
> Он умеет запускать Oracel Apache?

славо богу нет - с какого перепугу прикладной софт *nix запускается от рута ?

Потому что это СЕРВИС. Все сервисы запускаютс скриптами в /etc/init.d от пользователя РУТ. И дело СТАРТОВГО СКРИПТА запустить приложение от правильного пользователя. А также его же дело - выдать правильный код ответа, выдать статус если спрашивают, перечитать конфигурации и указать зависимости.

славо богу нет - с какого перепугу прикладной софт *nix запускается от рута ?

Потому что это СЕРВИС. Все сервисы запускаютс скриптами в /etc/init.d от пользователя РУТ. И дело СТАРТОВГО СКРИПТА запустить приложение от правильного пользователя. А также его же дело - выдать правильный код ответа, выдать статус если спрашивают, перечитать конфигурации и указать зависимости.

Посмотрите как запускается любой нормальный сервис - хоть bind, хоть apache, хоть ldap.
Вот так и оракл должен запускаться (в СуСях он так и запускается, в остальных системах народ пишет живопырки похожие на правильный запуск).

Я понимаю Ваши религиозные убеждения, но не надо ставить стартовые сусевые скрипты в пример. Для каждой версии оракла нужна своя версия orarun'а со своими тараканами. Я уж не говорю о запуске application server, который ни в одной версии orarun не предусмотрен.

Возможно боян. Но я сегодня буду пробовать ставить Oracle на OpenSuse. :(

славо богу нет - с какого перепугу прикладной софт *nix запускается от рута ?

Потому что это СЕРВИС. Все сервисы запускаютс скриптами в /etc/init.d от пользователя РУТ. И дело СТАРТОВГО СКРИПТА запустить приложение от правильного пользователя. А также его же дело - выдать правильный код ответа, выдать статус если спрашивают, перечитать конфигурации и указать зависимости.

Посмотрите как запускается любой нормальный сервис - хоть bind, хоть apache, хоть ldap.
Вот так и оракл должен запускаться (в СуСях он так и запускается, в остальных системах народ пишет живопырки похожие на правильный запуск).

Я понимаю Ваши религиозные убеждения, но не надо ставить стартовые сусевые скрипты в пример. Для каждой версии оракла нужна своя версия orarun'а со своими тараканами. Я уж не говорю о запуске application server, который ни в одной версии orarun не предусмотрен.

А статьи про установку на сусе, взятые с их сервера, мягко говоря, не полные. Они расчитаны только на базовую установку. Шаг влево-вправо вообще не рассматривается. Годятся только для обучения новичков.

У Суси не идеальные скрипты безусловно - дык потому и пишем что это ОРАКЛ должен писать ПРАВИЛЬНЫЕ скрипты по полным правилам сертифицированных линуксов, а не те сопли что он там пишет как gcstartup к примеру (сопля всем соплям сопля) и уж тем более на называть dbstart полноценным стартовым скриптом.

Я уже примеры приводил - ставим vmware - ставятся ПОЛНОЦЕННЫЕ сервисы, написанные и отлаженные по всем правилам (и для редхата и для суси). Ставим DEll Open Manage - аналогично. Да вообще все практически приложения для линукса ставят сервисы (еще бы - на хрена нужно приложение если его нельзя запустить). А Оракл выделяется полным неумением написать оные сервисы.

В ораклевой доке смотреть не пробовали?

Все это давно сделано и даже выкладывалось здесь. Вот - автостарт собс-сно оракла (аттач).

В операционной системе linux, так же как и в Windows, кроме обычных программ, которые могут взаимодействовать с пользователем есть еще один вид программ. Это работающие в фоне службы. Важность служб тяжело переоценить, они следят за состоянием системы, обеспечивают автоматическое подключение внешних устройств и сети, позволяют процессам взаимодействовать с оборудованием (dbus), а также в виде служб реализованы различные веб-серверы и серверы баз данных. В отличие от пользовательских программ, службы выполняются в фоне, и пользователь не имеет к ним прямого доступа. Пользователь еще не вошел в систему, только началась загрузка а основные службы уже запущенны и работают.

В этой статье мы рассмотрим управление службами Linux. Мы не будем трогать уже устаревшие системы, такие как SysVinit, сосредоточимся только на Systemd. Вы узнаете, как посмотреть запущенные службы linux, а также останавливать и запускать их самому.

Немного теории

Но потом на смену этому методу пришла новая модель и система инициализации systemd. Система инициализации запускается сразу после загрузки ядра и начинает инициализировать службы, теперь появилась возможность параллельной инициализации, а также зависимостей между службами. Таким образом, теперь можно определить сложное дерево порядка запуска служб. Но мы не будем вникать в подробности создания служб, нас интересует только сам процесс запуска. После запуска systemd собирает весь вывод службы в лог, и следит за ее работой, если служба аварийно завершилась, то автоматически ее перезапускает.

Служба в Systemd описывается файлом юнита, в нем описано что с ней нужно делать и как себя вести. Существуют такие типы служб:

  • service - обычная служба, программа
  • target - группа служб
  • automount - точка автоматического монтирования
  • device - файл устройства, генерируется на этапе загрузки
  • mount - точка монтирования
  • path - файл или папка
  • scope - процесс
  • slice - группа системных служб systemd
  • snapshot - сохраненное состояние запущенных служб
  • socket - сокет для взаимодействия между процессами.

Нас будут интересовать только service, и совсем немного target, но мы рассмотрели все остальные, чтобы вы смогли взглянуть на картину немного шире. Основы рассмотрели, теперь будет настройка служб LInux.

Утилита systemctl

В Systemd есть специальный инструмент для управления службами в Linux - systemctl. Эта утилита позволяет делать очень много вещей, начиная от перезапуска службы linux и проверки ее состояния, до анализа эффективности загрузки службы. Синтаксис у утилиты такой:

$ systemctl опции команда служба служба.

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

Рассмотрим все по порядку. Опции очень сильно зависят от команд, поэтому рассмотрим их позже, а пока пройдемся по командах:

А теперь основные опции:

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

Управление службами Linux

Теперь, когда вы уже знаете все основы, команды и параметры можно переходить к делу. Со всеми остальными тонкостями разберемся по пути. Сначала давайте посмотрим запущенные службы linux. Нас будут интересовать только программы, а не все эти дополнительные компоненты, поэтому воспользуемся опцией type:

systemctl list-units --type service

services

Команда отобразила все службы, которые известны systemd, они сейчас запущены или были запущены. Программа не пересматривает все файлы, поэтому будут показаны только те службы, к которым уже обращались. Состояние loaded - означает, что конфигурационный файл был успешно загружен, следующая колонка active - служба была запущена, а running или exited значит выполняется ли сейчас служба или она успешно завершила свою работу. Листать список можно кнопками вверх/вниз.

Следующая команда позволяет получить список служб linux, в который входят все службы, даже не запущенные, те, которые не запускались, но известны systemd, но это еще не все службы в системе:

systemctl list-units --type service -all

services1

Дальше больше. Вы можете отсортировать список служб systemctl по состоянию. Например, только выполняющиеся:

systemctl list-units --type service --state running

services2

Или те, которые завершились с ошибкой:

systemctl list-units --type service --state failed

service4

Для фильтрации можно брать любой показатель состояния из любой колонки. Другой командой мы можем посмотреть все файлы конфигурации служб на диске. Тут не будем фильтровать по типу, пусть программа покажет все:

Теперь отфильтруем только службы linux:

systemctl list-unit-files --type service

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

Чтобы запустить службу используется команда start, например:

sudo systemctl start application.service

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

Остановить службу linux можно командой:

sudo systemctl stop application

Посмотреть состояние службы позволяет команда status:

sudo systemctl status application

services4

Здесь вы можете видеть, состояние running, exited, dead, failed и т д. А также несколько последних строчек вывода программы, которые очень помогут решить проблему с запуском если она возникнет.

Автозагрузка служб в systemd

Как вы знаете, systemd позволяет автоматически загружать службы при запуске системы по мере их надобности. Команда list-unit-files показывает добавлена ли служба в автозагрузку.

Вообще, здесь может быть несколько состояний - enabled - в автозагрузке, disabled - автозагрузка отключена, masked - служба скрыта и static - значит что служба в автозагрузке, но вы не можете ее отключить.

Поэтому чтобы получить список служб linux, запускаемых автоматически достаточно отфильтровать ее вывод по состоянию:

systemctl list-unit-files --state enabled

services5

services6

Все службы, запускаемые по умолчанию. Можете также посмотреть службы static. Чтобы добавить службу в автозагрузку linux используйте команду enable:

sudo systemctl enable application

services7

А для того чтобы убрать ее из автозагрузки:

sudo systemctl disable applciation

services8

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

sudo systemctl is-enabled application

services9

Утилита просто выведет состояние enabled, disabled или static.

Выводы

Теперь настройка служб Linux не вызовет у вас проблем. Много чего мы упустили, systemd - очень большая, сложная и многофункциональная система, которую не охватить в одной статье. Но и также очень сложно понять. Но я думаю, что все, что касается управления службами Linux мы разобрали. Если у вас остались вопросы, спрашивайте в комментариях!

date

21.04.2020

directory

CentOS, Linux

comments

комментариев 8

В данной статье мы рассмотрим основы управлением автозагрузкой сервисов и скриптов в Linux CentOS 7/8. В частности, разберем основы работы с демоном systemd, научимся добавлять в автозагрузку сервисы и убирать их оттуда, а также рассмотрим альтернативные варианты запуска скриптов или демонов после старта системы.

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

Systemd: управление автозагрузкой служб в Linux

В большистве популярных современных популярных дистрибутивов Linux (CentOS 7, RHEL, Debian, Fedora и Ubuntu) в качестве демона автозагрузки вместо init.d используется systemd. Systemd – менеджер системы и служб Linux, используется для запуска других демонов и управления ими в процессе работы, использует unit-файлы из /etc/systemd/system (init.d использовал скрипты из каталога /etc/init.d/). Systemd позволяет распараллелить запуск служб в процессе загрузки ОС, тем самым ускоряя запуск.

Для управления system используется команда systemctl.

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

systemctl list-units

Список unit-файлов можно получить командой:

Данная команда отобразит все доступные юнит-файлы (не зависимо от того, были они загружены в systemd после загрузки ОС или нет).

Чтобы вывести список активных сервисов и их состояние, выполните:

Как видим из списка, здесь отображаются даже сервисы, которые не были найдены на диске «not-found».

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

systemctl list-units —type=service вывести список сервисов в centos

Добавление сервиса в systemd

Для управления сервисами в systemd используется особый синтаксис. После имени серверсв в конце нужно указывать .service. Например:

systemctl enable nginx.service – команда добавит в автозагрузку веб-сервер nginx

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

Вывод этой команды показывает в какой директории был создан симлинк на файл сервиса.

Чтобы посмотреть добавлен тот или иной сервис в автозагрузку, можно проверить его статус:

systemctl status nginx.service

При выводе нужно обратить внимание на строку:

Значение enabled означает что данный сервис загружается автоматически (добавлен в автозагрузку). Если сервис не загружается автоматом, здесь буде указано disabled.

Удаление сервиса из systemd

Вы можете удалить сервис из автозагрузки, чтобы он не запускался после старта Linux (при этом сам сервис с сервера не удаляется). Чтобы удалить сервис из автозагрузки, выполните команду:

systemctl disable нужный_сервис

Например, чтобы удалить из автозагрузки nginx, выполните:

После выполнения команды, симлинк на файл сервиса будет удален из директории systemd. Можно проверить, есть ли юнит в автозагрузке:

Systemd: маскировка юнитов

В моей практике встречались «вредные» сервисы, которые после удаления их из автозагрузки, все равно там оставались и запускались после рестарта ОС. Чтобы решить этот вопрос, можно замаскировать сервис:

systemctl mask nginx.service

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

Снять маску можно командой:

Если после маскировки сервиса, вы проверите юнит-файлы, то увидите, что сервис помечен как замаскированный (состояние masked):

systemctl mask маскировка сервиса

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

Автозапуска скриптов и сервисов с помощью rc.local

Для запуска различных скриптов при загрузке Linux чаще всего используется rc.local.

Но помимо скриптов, через rc.local так же можно и запускать сервисы, даже те, которые запускаются через systemd. Не могу ответить на вопрос, для чего использовать в таком случае rc.local, если есть systemd, но пару примеров я приведу.

Начнем с того, что файл /etc/rc.local должен быть исполняемым:

chmod +x /etc/rc.local

Rc.local должен быть добавлен в автозагрузку systemd:

systemctl enable rc-local

И на примере того же nginx, мы можем добавить в rc.local команду запуска веб-сервера:

service nginx start

rc.local - автозапуск команда в libux centos

Но я редко использую rc.local для запуска сервисов. Чаще rc.local используется, когда нужно запустить скрипт, либо выполнить разово какую-то команду.

К примеру, я создал скрипт /root/test.sh который выполняет некоторые действия, и хочу запустить его сразу после запуска системы. Добавляем в файл rc.local строку:

rc.local запуск sh скрипта

Начиная с CentOS 7, разработчики указывают на то, что rc.local устаревший демон и осуществлять автозапуск скриптов или сервисов через него, это прошлый век. Но пока он работает, я пользуюсь им, так как он очень прост в эксплуатации.

Создание собственного демона и добавление его в systemd

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

Например, нам нужно запускать все тот же скрипт /root/test.sh после перезагрузки системы. Начнем с создания файла нашей будущей службы:

touch /etc/systemd/system/test-script.service
chmod 664 /etc/systemd/system/test-script.service
nano /etc/systemd/system/test-script.service

Содержимое файла будет следующее:

User – пользователь под которым будет запускаться демон

Type=oneshot — процесс будет завершен до запуска дальнейших юнитов

Если вас устроило то, как работает сервис, добавьте его в автозагрузку:

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

Автозапуск через cron

Если вам с какой-то периодичностью нужно запускать скрипт или команду, вы можете воспользоваться cron-ом:

crontab -e — открыть терминал для написания задания cron

И добавьте туда нужное вам задание, например:

* * * * * /root/test.sh — запускать скрипт каждую минуту.

Можно написать скрипт watch-dog, который по заданию будет проверять, например, статус какого-либо сервиса и, если он не работает, запускать его. На нескольких своих проектах я использую подобную схему.

Чтобы вывести список всех заданий в крон, нужно выполнить команду:

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

  • Минуты от 0 до 59
  • Часы от 0 до 59
  • День месяца от 1 до 31
  • Месяц от 1 до 12
  • День недели от 0 до 7 (0 или 7 это воскресение)

В нашем задании скрипт запускается каждую минуту, поэтому там стоят «*».

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

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

.bashrc: автозапуск скриптов при запуске терминала

Если вам требуется выполнять какие-то действия при запуске терминала ssh, вы можете добавить любую команду или выполнение скрипта в .bash_profile или .bashrc. Теоретически, вы можете добавить какое-либо действие в любой из этих файлов, оно выполнится в любом случае. Обычно все необходимое добавляется в .bashrc, а сам .bashrc запускают из .bash_profile.

Я добавил в файл .bashrc команду на рестарт веб-сервиса nginx:

service nginx restart

.bash_profile - запуск скрипта при старте сессии

После этого сохранил файл и перезапустил терминал:

пример автозапуска скрипта через сессию

Как видите, при запуске терминала, веб-сервер был перезапущен. Какие действия можно выполнять при запуске терминала? Вероятно, запускать какие-то вспомогательные утилиты, например, проверка uptime сервера:

показывать uptime при входе

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


Надеюсь эта статья по управлению автозапуском сервисов и скриптов в LInux (статья писалась для CentOS) оказалась полезной для вас. Наверняка тем, кто только познает азы системного администрирования Linux, это информация будет кстати.

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