Astra linux запуск скрипта при старте системы
Иногда пользователи могут столкнуться с необходимостью добавления каких-то сервисов или событий в автозагрузку Linux системы (Ubuntu, Debian, CentOS, Gentoo, Alpine Linux и так далее), но не всегда удается сделать это встроенным в графическую среду средствами (например Startup Applications в Ubuntu). То, как сделать простой скрипт и добавить его запуск при инициализации системы будет рассказано ниже.
Опишем это на простом примере: opendchub – это сервис dc-хаба, который может запускаться только под супер-пользователем (то есть он запускается вручную только командой sudo opendchub или непосредственно под root’ом).
Для начала создадим скрипт запуска в стандартном каталоге инициализации системы:
В текстовом редакторе введите три строки будущего скрипта:
#!/bin/bash
echo «Opendchub starting. »
opendchub
Сохраните изменения (Ctrl+O) и выйдите из текстового редактора nano (Ctrl+X)
В первой строке этого скрипта указывается интерпретатор (если вы не знакомы с этим понятием, то лучше оставить именно такой как указан выше).
Во второй строке, командой echo обеспечивается простой вывод на экран текста – в принципе эта строка необязательна, она лишь будет информировать пользователя о том, какое действие происходит в данный момент.
Третьей строкой собственно указывается команда запуска (в нашем примере – это сервис opendchub) – пишется тут всё точно также, как вы выполняли необходимую команду в терминале, за исключением того, что не надо добавлять ‘sudo‘ – так как этот скрипт будет выполняться при инициализации системы, то есть уже сразу под суперпользователем.
После того как файл создан, сделаем его исполняемым:
sudo chmod +x /etc/init.d/odchub
Теперь добавим созданный скрипт к автозагрузке. Для этого есть несколько способов, опишем два наиболее встречающихся.
в вашем дистрибутиве покажет “systemd”, то рекомендуем создать systemd unit, в других случаях стоит прибегнуть ко второму описаному решению, init.
Systemd и init – это разные системы инициализации, используемые в Linux. Изначально массово использовалась init, но последние годы во всё большем количестве дистрибутивов используется systemd. Стоить добавить, что это не единственные системы инициализации, но как правило большинство из них поддерживают синтаксис init.
Перед тем как добавить наш сценарий в автозагрузку при использовании системы инициализации systemd, потребуется создать соответствующий файл описания (так называемый “юнит”, являющийся прямой инструкцией системной службы):
sudo nano /etc/systemd/system/odchub.service
В текстовом редакторе скопируйте следующие строки в этот файл:
[Unit]
Description=Opendchub service
After=network.target
[Service]
ExecStart=/etc/init.d/odchub
[Install]
WantedBy=multi-user.target
Сохраните изменения (Ctrl+O) и выйдите из текстового редактора nano (Ctrl+X).
Description – заполняентся произвольно, это просто описание юнита.
After=network.target – означает, что эта служба сможет быть запущена только после поднятия сетвых сервисов.
ExecStart – путь к исполняемому файлу, будет выполнять при старте службы.
WantedBy=multi-user.target – означает, что будущий сервис будет запускаться после активации цели multi-user.target (примерно тоже самое что runlevel 3 в init).
Более подробно о возможностях systemd можно прочесть здесь или здесь.
После сохранения файла юнита вы можете использовать созданную службу odchub, например, стартовать (единократно выполнить написанный нами скрипт):
sudo systemctl start odchub
А этой командой вы “включите”, то есть добавите в автозагрузку системы:
sudo systemctl enable odchub
Для удаления созданной таким образом службы, достаточно пары команд:
sudo systemctl disable odchub
sudo rm /etc/systemd/system/odchub.service
После того как создан исполняемый скрипт в соответствующей директории (в нашем случае /etc/init.d/odchub), для включения его при загрузках системы, достаточно выполнить команду:
sudo update-rc.d odchub defaults 90
Числовое значение после слова defaults указывает на приоритет для старта этого скрипта.
В результате этих действий сервис opendchub будет запускаться еще до загрузки графической среды, сразу вместе с инициализацией операционной системой. Если вы захотите удалить этот скрипт из автозагрузки, то перед тем как удалить сам файл надо выполнить такую команду:
sudo update-rc.d -f odchub remove
Используя эти простые примеры вы можете аналогичным образом создать свой собственный скрипт и добавить его к автозагрузке.
14 Comments Leave a comment
Огромное спасибо.
очень пригодилось для автоматического монтирования расшаренного диска в виртуальной манине
Огромное спасибо! долго пытался добавить отключение APM винчестера в автозагрузку, очень помогло! что скрипт надо кинуть в init.d и сделать исполняемым я знал, а вот просто update-rc – нет
Подскажите, а этот скрипт будет стартовать для конкретного пользователя или для всех.
У меня просто стоит NX сервер и мне нужно каждый раз вручную логиница и запускать скрипт для расшара папки.
P.S. Заранее спасибо!
Igor, этот скрипт будет запускаться под пользователем root при инициализации системы. Также, можно написать специальный скрипт, который сможет запускать различные программы под какими-то определенными пользователями. А NX server исправно автозапускается после установки из deb с официального сайта. Вы собирали его из исходного кода?
да. Nx собирался именно так.
Может мне сделать так??
# права на исполнение
sudo chmod +x /etc/init.d/my_script
# симлинк на запуск в автомат.
sudo ln -s /etc/init.d/my_script /etc/rc1.d/S20_my_script # запуск при single user mode
————————————-
Я делал когда то такое для Iptables, что бы он автоматически запускал мои правила.
Но в моём случае, каждое утро я захожу и запускаю этот скрипт вручную что бы дать права на использование пользователям.
Смоленск 1.5 автозагрузка скрипта под конкретным пользователем
имеется такая задача:
есть 2 пользователя, условно admin и user
user входит в систему, в которой сразу запускается программа, и он ничего не может делать, кроме как пользоваться этой программой,
под admin программа не запускается, его задача эту программу настраивать, обновлять, добавлять при необходимости пользователей типа user и т.д.
и вот в чём вопрос: как сделать, чтобы скрипт запускающий программу работал под конкретных пользователей?
на просторах интернета нашёл, что нужно добавить для конкретного пользователя
sudo -i -u user /etc/runmyprog.sh
или для всех пользователей
/etc/runmyprog.sh
в /etc/rc.local, но ни тот, ни другой вариант не работает, при этом двойной клик по rc.local запускает программу в обоих случаях
Montfer
New member
с режимом Киоск не пробовали?
— попробовал на виртуалке:
— установил пакет fly-admin-kiosk
— создал пользователя user
— сделал вход под ним, чтобы создались домашние каталоги
— под админом в политике безопасности включил user’у режим киоска, указав, что он будет работать только с прогой firefox.
— юзверю стал доступен только firefox
DrageFabeldyr
New member
в моём случае пользователь не должен запускать программу сам, она должна запускаться автоматически, но пользователей может быть несколько и у всех она должна запускаться
можно каждому пользователю при создании добавлять её в пуск -> настройки -> автостарт, но может есть более «админский» способ?
Montfer
New member
в моём случае пользователь не должен запускать программу сам, она должна запускаться автоматически, но пользователей может быть несколько и у всех она должна запускаться
можно каждому пользователю при создании добавлять её в пуск -> настройки -> автостарт, но может есть более «админский» способ?
В киоске прога при входе в систему и будет сама запускаться, а при закрытии программы должен сработать автовыход из сессии. И больше ничего нельзя запустить, ни файл сохранить. даже рабочего стола и меню пуск не будет
oko
New member
to DrageFabeldyr
/etc/rc.local — bash-скрипт, запускаемый при старте системы согласно спецификации System V Init, но до старта X-Server и его окружения (т.е. до старта графики). Поэтому размещать в нем скрипты, стартующие какое-либо GUI-приложение — не выход (хотя и тут можно нагородить велосипед с задержками и автоподключением к текущей X-сессии, но оно того не стоит). Еще /etc/rc.local исполняется с правами суперпользователя root. Из него, конечно, можно что-либо запустить с правами пользователя через su — имя_пользователя или через предложенный у вас вариант с sudo. Но это тоже весьма узкоспециализированные варианты и не для такого монолита, как Astra Linux Special Edition в графическом режиме, ага.
Так что да, проще и быстрее всего добавлять штатными средствами нужный софт в автозапуск пользователю при его создании. Можно чуток автоматизировать — тут на форуме был предложен вариант с автозапуском через правку файлов FlyWM. Поищите.
Или, да, +1 к тов. Montfer — «киос» решает проблему, если, конечно, пользователю для штатной работы хватит одного единственного приложения.