- Autostarting (Русский)
- Contents
- Демоны
- Systemd
- inotify
- Коммандные оболочки
- /etc/profile
- Графический
- How to automatically run program on Linux startup
- Automatically run program on Linux startup via systemd
- Automatically run program on Linux startup via cron
- Automatically run program on Linux startup via rc.local
- Automatically run program on GNOME startup
- Automatically run program on KDE startup
- Automatically run program on new Bash session
- Власть над демонами или автозапуск в Linux
- How to add a script to Startup Applications from the command line? [duplicate]
- 2 Answers 2
- How to set up a startup launcher from command line
- Example script
- The script
- What it does
Autostarting (Русский)
Эта статья ссылается на различные методы автоматического запуска сценариев и приложений, когда происходит некоторое конкретное событие, такое как, например, включении или выключении компьютера со входом или выходом из оболочки.
Contents
Демоны
Вы можете запускать сценарии или приложения, как демоны, см. демоны.
Systemd
Systemd является базой инициализации по умолчанию, заменяя сценарии инициализации (initscripts). Службы, которые созданы systemd могут быть найдены в подпапках /etc/systemd/system/ . Службы могут быть включены с помощью команды systemctl . Для получения более подробной информации о systemd и о том, как писать сценарии для автозапуска, смотрите Systemd. Для автозапуска скриптов, для конкретных пользователей см. systemd/Пользователь.
Cron can be used to autostart non-GUI system setup tasks.
inotify
inotify-tools может быть использован для выполнения команд или скриптов по событиям inotify, вызванным изменениями файловой системы. Вы можете посмотреть некоторые примеры.
Коммандные оболочки
Для автозапуска программ в консоли или при входе, Вы можете использовать оболочку для запуска файлов/каталогов. Прочитайте документацию для вашей оболочки, или статью ArchWiki, например Bash#Файлы настроек или Zsh#Автозапуск приложений.
/etc/profile
После входа в систему, все Bourne-совместимые исходные оболочки /etc/profile , в свою очередь читают любые файлы *.sh в /etc/profile.d/ : эти сценарии не требуют директивы интерпретатора, и они не должны быть исполняемыми. Они используются для настройки среды и определяют настройки для конкретных приложений.
Графический
Вы можете запускать программы автоматически, когда входите в ваш Оконный Менеджер или Окружение Рабочего Стола.
Источник
How to automatically run program on Linux startup
There are a few stages of Linux startup, and you can set your own autostart script or program at any of the stages where it could be a single command, a chain of commands, or an executable shell script. There could be, however, some differences in startup procedure between different Linux distributions and versions.
Modern Linux will first boot into systemd while older versions of Linux uses System V init. Both methods will run cron and rc.local before the desktop environment such as GNOME or KDE is loaded. On the other hand, server-based Linux distributions will run the default shell such as Bash after the user logged in at the console instead of loading the desktop environment.
Methods to automatically run program on Linux startup:
Automatically run program on Linux startup via systemd
systemd is the standard system and service manager in modern Linux. It is responsible for executing and managing programs during Linux startup, among many other things. Compatible programs will provide service unit files used by systemd to manage the program’s execution.
You can configure systemd to run programs automatically during Linux startup following these steps:
You’ll have to create your own service unit if it’s a custom program or if your program doesn’t come with one during installation
Related: Creating and modifying systemd unit files
enabled service unit is executed during boot
Automatically run program on Linux startup via cron
cron is a daemon to execute scheduled commands. The commands are stored in the cron job table or crontab and are unique for each user in the system. It’s started during system boot either by systemd or System V init, and you can schedule your job or program to be executed right during the system boot itself by following these steps:
You’re required to select an editor for the crontab if this is the first time the user uses the command.
A crontab will be created for the user running the command and will be executed using the privileges of the user. If you need your program to run as the root user, run crontab -e as the root user itself.
@reboot defines the job to be executed during system boot.
Use full path for your programs when possible and write your commands in a single line.
The file is saved in /var/spool/crontab/
Automatically run program on Linux startup via rc.local
rc.local is a legacy from the System V init system. It is the last script to be executed before proceeding to a login screen for the desktop environment or a login prompt at the terminal. It’s usually a Bash shell script, and you can run anything from the script.
You can configure your rc.local script following these steps:
It must start with interpreter (/bin/bash) and ends with an exit code (0 is for success)
The file will be executed as the root user during system boot
Automatically run program on GNOME startup
GNOME is the default desktop environment for Linux distributions such as Ubuntu and Red Hat. GNOME can be configured to run programs when a user logs in and can be configured by following the below article:
Automatically run program on KDE startup
KDE is another popular desktop environment for Linux and is the default in Kubuntu and openSUSE. It can easily be configured to run programs when a user logs in as detailed in the following article:
Automatically run program on new Bash session
A new shell program will be spawned when you start your terminal session. Bash is the default shell for most Linuxdistributions, and when started, it will look for the following files in the particular order and executes them.
These files contains commands and logics to set up proper environment variables and run required programs in Bash language. It’s also configured to normally execute other files such as /etc/bashrc, /etc/bash.bashrc and
You can edit any of these files to run your program when a Bash session is started. Below is a part of a typical
Comment anonymously. Login not required.
Источник
Власть над демонами или автозапуск в Linux
Для реализации автозапуска в Linux написано уже немало и на разных языках, но приходится искать, потому постарался свести большую часть тут. Здесь не рассказывается полностью весь процесс с нуля, но предоставлено достаточно информации и ссылок, чтобы сделать атоматический запуск программ в Linux реальностью.
Стоит сразу заметить — чтобы программа была полноценным сервисом/демоном, она должна быть соответствующе написана (link1, link2). Впрочем такое делают не всегда, хотя возможно это и не совсем правильно.
Существуют несколько способов сделать автозапуск программ в Linux:
- записать вызов программы/скрипта запуска в /etc/rc.local в фоновом режиме (&) (в разных дистрибутивах может лежать в разных местах, например, /etc/rc.d/rc.local) с перенаправленными потоками ввода/вывода в /dev/null. Например, «/home/user/my_prog 1 > /dev/null 2 > /dev/null &». Также, дополнительно, можно воспользоваться командой nohup;
- внести вызов в /etc/inittab, согласно правилам его оформления. В отличие от первого способа тут можно указать уровень запуска для программы;
- написать скрипт, позволяющий запускать/останавливать/перезапускать программу как демона, а также получать информацию о её состоянии.
Первый способ самый лёгкий, но и самый проблемный. Файл rc.local есть не во всех дистрибутивах. В нём нельзя задать уровень запуска. Если там записано несколько программ, то сложно ими управлять как сервисами (разве что запустить или остановить все одновременно). И, под конец, запуск из него подрывает устойчивость системы от взлома (примеры можно легко найти в поисковике).
Второй метод довольно экзотичный, сам узнал о нём совсем недавно, хотя пишут, что им пользуются многие администраторы. Тем не менее, используя его, нельзя оперировать запущенными таким способом программами как демонами, что довольно неудобно. Да и загромождать inittab некрасиво.
Последний метод на текущий момент самый «кошерный», но немного сложнее предыдущих (возможно, на первый взгляд). Именно им представлены все системные демоны, что говорит само за себя. Потому его и рассмотрю ниже.
Также есть способ автозапуска графических программ, но его опишу в конце, отдельно от остальных, т.к. он имеет недемоническую сущность.
Сразу обмолвлюсь, что у меня стоит Debian 6 и в других дистрибутивах пути могут несколько различаться.
Автозапуск программы как демона
Обычно в системе уже есть много подсказок как это сделать, но всё-таки приходится лазить по разным файлам и искать в интеренете дополнительную информацию. Это не значит, что я опишу тут каждую букву, но искать придётся меньше, надеюсь.
Для начала стоит заглянуть в каталог /etc/init.d. Здесь содержатся запускные скрипты всех сервисов, а также два файла для желающих написать себе такой же:
README и skeleton
skeleton содержит в себе болванку скрипта запуска с довольно подробными комментариями, а README его неплохо дополняет, не смотря на его небольшой размер. Также можно посмотреть и другие файлы и попытаться найти там что-то, что прояснит непонятную ситуацию.
В 6-ом debian`е для запускных скриптов демонов используется LSB (Linux Script Base) Init Standart. Почитать о нём подробнее можно тут. Для систем, где LSB не используется стоит взглянуть сюда.
Рассмотрим поближе файл skeleton. Первое с чего он должен начинаться, конечно же «#!/bin/sh», т.к. init-скрипт — запускной файл. Далее идёт комментированный заголовок:
Может показаться, что это просто лишняя информация от автора, но это не так. То, что указано здесь используется при прописывании скрипта в систему. Тут как раз пригодится файл README, который показывает, что в заголовке skeleton перечислены не все возможные параметры. Как минимум есть ещё следующие:
Все параметры и их полное описание (на английском) можно увидеть тут, а на русском тут и тут (спасибо awzrno за новые ссылки ^_^). К русскому варианту добавлю, что в Required-Start: можно прописать $all, тогда текущий скрипт будет запускаться после всех остальных (иногда это бывает нужно). Также X-Interactive: true показывает, что этот скрипт может взаимодействовать с пользователем, запросом на ввод чего-нибудь, например пароля.
Далее в skeleton идёт инициализация переменных, используемых в самом скрипте. Часть из них нужно будет настроить под свои нужды. Потом проверки на то, что сам демон существует и попытка прочитать конфигурационный файл (их имена должны быть указаны в переменных выше), далее загрузка переменных rcS, а потом идёт одна из самых интересных частей init-файла:
. /lib/lsb/init-functions
это определение LSB функций работы с логами, LSB-статусом сервиса, работы с процессом. В некоторых дистрибутивах этот файл может находиться в каталоге /etc/init.d. Названия и часть подробностей можно узнать непосредственно из комментариев к функциям в этом файле, а также тут.
Следующая часть — непосредственно тело скрипта. Тело состоит из условных частей, которые являются командами для демона: start, stop, restart/reload/force-reload, status. Кто-то выделяет их в отдельные функции, кто-то нет. На мой взгляд, функциями они выглядят эстетичнее и код более понятен. Все эти команды объединяет оператор выбора case, который и выбирает для исполнения нужный кусок кода, в зависимости от команды (параметра) с которой был запущен init-скрипт.
Таким образом для создания обычного скрипта достаточно подставить в переменные в начале файла нужные значения и, возможно, немного добавить кода в функции start/stop (например загрузку/выгрузку драйвера).
После того как файл будет готов его нужно скопировать в /etc/init.d и добавить в автозагрузку:
update-rc.d defaults
(или insserv для debian 6 stable и выше)
Удалить из автозагрузки можно так:
update-rc.d -f remove
(или insserv -r для debian 6 stable и выше)
Далее также можно использовать команды sysv-rc-conf в debian или service в fedora core, чтобы включить/выключить автозагрузку сервиса.
Автозапуск графического ПО без ввода паролей
Сама по себе реализация такой возможности понижает уровень защищённости ОС, т.к. войти может любой. Но бывают ситуации, когда это необходимо. Рассмотрю тут варианты только для двух основных графических менеджеров, т.к. других установленных под рукой нет.
Убрать запрос пароля на вход можно в центре управления (kcontrol) -> системное администрирование -> менеджер входа в систему -> удобства. Там выбрать пользователя, под которым входить (кроме рута) и поставить нужные галочки (разрешить автовход и вход без ввода пароля).
Чтобы сделать автозапуск программы нужно в каталог /home/ /.kde/Autostart добавить ссылку на запускной файл/скрипт нужного ПО.
Тут убрать запрос пароля на вход можно также в центре управления (gnome-control-center) -> Login Screen. Там, под рутом (ткнуть на замок, ввести пароль) выбрать пользователя, под которым входить (кроме суперпользователя).
Для автозапуска программы опять же в центре управления выбрать Startup Applications -> Add и заполнить маленькую форму.
Для обоих графических менеджеров:
Если нужно запустить под обычным пользователем, но от рута, то ещё надо настроить правила в /etc/sudoers на запуск конкретной программы/набора программ от имени суперпользователя (манами рекомендуется для безопасности делать это с помощью visudo). Как это делать рассказывать не буду, т.к. в man sudoers всё хорошо расписано.
Источник
How to add a script to Startup Applications from the command line? [duplicate]
I have a shell script. I want to configure my script to run automatically during startup. I know how to do this from GUI. But I wanted to do this from terminal. How can I do this?
On a primary research I found that the file needs to be moved to /etc/int.d/ directory. But this operation needs sudo permission. I wanted to do this without super user permissions.
I also found that there are files under
/.config/autostart/ which are having some settings regarding the startup applications. But I don’t know how to edit them to achieve this.
Can someone tell me the exact procedure to achieve this?
/.config/autostart from command line, but it would take. a minor script :). Would that be ok?
2 Answers 2
How to set up a startup launcher from command line
Like you mention in your question, commands can be run on log in by placing a launcher in
/.config/autostart Since the launcher is only used to startup a script, you only need the «basic» desktop entry keywords in the created .desktop files: the keywords / lines you’d need at least:
The (optional) line X-GNOME-Autostart-enabled=true will be added automatically if you enable/disable the autostart function of the launcher (it is set to X-GNOME-Autostart-enabled=true by default)
More on required fields, you can find here.
Example script
To create such a launcher from the command line, you would need a small script that would take the name of the starter and the command to run as an argument. An example of such a script below.
If I run it with the command:
It creates a startup launcher, running gedit when I login.
The launcher is also visible in Dash > Startup Applications:
The script
Paste it into an empty file, save it as set_startupscript.py , run it by the command:
What it does
- It creates a basic launcher (you don’t need more, running a script) in
/.config/autostart , taking the name and command as arguments.
If a launcher with the name already exists in
Источник