Что такое Linux-эквивалент Windows Startup?

16

Есть ли способ добавить приложение / скрипт в автозагрузку Linux, чтобы при каждом запуске системы он выполнялся?

Я ищу какой-то автоматизированный способ, то есть пользователь не должен добавлять это по заданию cron или что-то в этом роде.

Sourav
источник
Смотрите также этот SO ответ: Запустите автоматически программу при запуске под Linux Ubuntu
Абхишек Гупта
если это Ubuntu, просто используйте $ gnome-session-properties
user3804598

Ответы:

11

Что-то вроде Cron ?

Обратите внимание на @rebootзапись

Это наиболее гибкий подход, который больше всего напоминает «запланированные задачи» Windows (на самом деле лучше).

kevlar1818
источник
Можно ли добавить работу в CRON без намерения пользователя?
Сурав
да. просто напишите /etc/cron.dили вызовите crontab из вашей программы без их ведома.
Что вы имеете в виду? Если вы имеете в виду вручную добавить один программно, то да. Crontabs - это просто текстовые файлы.
10

Xorg автозапуск

Помимо сценариев запуска на системном уровне, среда вашего рабочего стола может иметь свой собственный способ автоматического запуска программ. Предполагается, что папка .config/autostartявляется нейтральным для рабочего стола способом определения записей автозапуска. /etc/xdg/autostartдля общесистемной конфигурации. Подробности о спецификации на http://developer.gnome.org/autostart-spec/ .

Для LXDE записи автозапуска также могут быть установлены в ~/.config/lxsession/LXDE/autostart.

Это немного отличается, если вам нужно запустить ваши скрипты после запуска сети. В этом случае вам следует проверить специальные сценарии после подключения, которые могут быть определены для вашего сетевого менеджера. И NetworkManager, и wicd имеют свои собственные способы указания записей автозапуска после подключения. Если сеть настроена через ifupdown, то в /etc/network/if-up.d/папке могут быть размещены сценарии последующей обработки . Но лучший подход к выполнению сценариев после подключения может быть системным (для систем, которые его поддерживают, что является большинством современных дистрибутивов).

Автозапуск как системный сервис

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

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

Я суммирую некоторые преимущества ( systemd может сделать намного больше ):

  • Запуск от имени пользователя root или определенного пользователя: например, User=myuser
  • Перезапустите сервисы при сбое с настраиваемыми таймаутами: Restart=on-failure|on-watchdog|on-abnormal|always
  • Установка типа услуги: Type=simple|forking|oneshot|notify|dbus
  • Установите предварительные условия и зависимости при запуске, т. Е. Вы можете настроить запуск службы после запуска сети ( Wants=network-online.targetв [Unit]разделе).

Пример службы, которая запускает демон telegram-cli. Поместите это в /etc/systemd/system/tg.service.

[Unit]
Description=MyDaemon
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/local/bin/telegram-cli -k /etc/telegram-cli/tg-server.pub -W -P 1234 -d -vvvRC
ExecStop=/usr/bin/pkill -f telegram-cli

User=jicu

[Install]
WantedBy=multi-user.target

Теперь вы можете включить службу автозапуска:

sudo systemctl enable tg

Запустите сервис:

sudo systemctl start tg

Остановить службу:

sudo systemctl stop tg

Проверьте статус:

systemctl status tg

Отключить службу:

sudo systemctl disable tg

Чтобы сэкономить лишний набор текста, вы можете добавить в свою ~/.bashrcстроку, alias sc='sudo systemctl $*'тогда вы сможете сократить команды выше, например sc start tg.

ПРИМЕЧАНИЕ. Если вы использовали, cronто имейте в виду, что записи в crontab запускаются в ограниченной среде - то же самое относится и к systemd: всегда используйте абсолютные пути и не делайте предположений относительно каких-либо определяемых переменных. Явно установите любые переменные, от которых зависят ваши скрипты. systemd не будет использовать ваш пользователь .bashrcи $PATH.

Больше информации:

ccpizza
источник
7

Да, можно запускать программы при запуске в Linux, определяя пути к исполняемым файлам, rc.localкоторые находятся в каталоге /etcили /etc/rc.d, например:

#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local
/path/to/executable

Примечание: не забудьте назначить исполняемые права, как описано в документации к файлу, т.е. Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure that this script will be executed during boot.

Дирк Эддельбюттель
источник
добавление записи в файл будет запускать программу каждый раз?
Сурав
2
Каждый раз при перезагрузке да. Если вы хотите регулярно назначать задания (каждый день, час, неделю или любую нечетную комбинацию), то cronпланировщик - ваш друг.
3
  1. Поиск по Startup applicationsиспользованию кнопки домой
  2. щелчок Add
  3. Введите имя для вызова приложения (подойдет любое имя)
  4. В Startup command boxвведите команду
  5. Нажмите OK(вы должны увидеть вашу новую команду в списке)
  6. щелчок Close

Проверка путем перезапуска или выхода из системы и обратно.

Источник: https://help.ubuntu.com/community/AddingProgramToSessionStartup

coder1111
источник
1

В каждом дистрибутиве используется каждая собственная методика начальной загрузки, поэтому нужно посмотреть документы для вашего дистрибутива. /etc/rc.local - это место, где вы можете поместить несколько автоматических скриптов, но оно действительно устарело. В настоящее время большинство систем на основе Linux используют уровни запуска или начальную загрузку systemd, так что большинство автоматически запускаемых заданий может контролироваться на должном уровне.

galadog
источник
0

Я нашел свой ответ здесь: /programming/7221757/run-automatics-program-on-startup-under-linux-ubuntu. Мне удалось создать файл / скрипт для отключения моего трекпада, пока я в моя сессия Linux Ubuntu 12.10.

CatGuyTX
источник
3
Рад, что вы нашли решение, не могли бы вы включить краткое описание шагов в своем ответе, просто чтобы этот ответ был более полезным, чем просто ссылка. Благодарность!
SLM
Искал способ автоматизировать и отключить трекпад при запуске. Команда, которую я ввел в Терминал, была 'sudo modprobe -r psmouse'. Это отключило бы трекпад во время текущего сеанса. Я хотел автоматизировать это при загрузке. Я провел небольшое исследование и написал скрипт, изменив файл /etc/rc.local, добавив 'sudo modprobe -r psmouse. Затем выполните следующие команды из терминала: 'sudo mv / filename /etc/init.d/' 'sudo chmod + x /etc/init.d/filename' 'sudo update-rc.d имя файла по умолчанию' Теперь сенсорная панель отключена при запуске.
CatGuyTX