Иногда пользователи могут столкнуться с необходимостью добавления каких-то сервисов или событий в автозагрузку Linux системы (Ubuntu, Debian, CentOS, Gentoo, Alpine Linux и так далее), но не всегда удается сделать это встроенным в графическую среду средствами (например Startup Applications в Ubuntu). То, как сделать простой скрипт и добавить его запуск при инициализации системы будет рассказано ниже.
Опишем это на простом примере: opendchub – это сервис dc-хаба, который может запускаться только под супер-пользователем (то есть он запускается вручную только командой sudo opendchub или непосредственно под root’ом).
Для начала создадим скрипт запуска в стандартном каталоге инициализации системы:
sudo nano /etc/init.d/odchub
В текстовом редакторе введите три строки будущего скрипта:
#!/bin/bash
echo «Opendchub starting. »
opendchub
Сохраните изменения (Ctrl+O) и выйдите из текстового редактора nano (Ctrl+X)
В первой строке этого скрипта указывается интерпретатор (если вы не знакомы с этим понятием, то лучше оставить именно такой как указан выше).
Запуск Windows программ в Linux | Какой из 3-х вариантов окажется лучше? HGL, Bottles, PortProton
Во второй строке, командой 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).
Сложно ли переходить на Linux?
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
Огромное спасибо.
очень пригодилось для автоматического монтирования расшаренного диска в виртуальной манине
Дмитрий says:
Огромное спасибо! долго пытался добавить отключение 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, что бы он автоматически запускал мои правила.
Но в моём случае, каждое утро я захожу и запускаю этот скрипт вручную что бы дать права на использование пользователям.
Источник: oss-it.ru
unixforum.org
Параметры запуска программы (указанные в lnk-ярлыке в виндах)
Вопросы настройки, запуск любых Windows-программ, кроме игр
11 сообщений • Страница 1 из 1
user0zlt74 Сообщения: 102 ОС: Arch Linux — core Dump
Параметры запуска программы
Сообщение user0zlt74 » 20.02.2009 15:21
В винде есть софтина, в ее параметрах запуска указанно 2 параметра user=user psw=1, тоесть примерно так:
C:Socktermsockterm.exe user=user psw=1
это указаннно в поле «путь к файлу» (кажеться так называеться) в свойстве ярлыка на рабочем столе
Эти же параметры необходимо указать для запуска этой же софтины, но уже через вайн — кто-нить знает как это сделать ?
Спасибо сказали:
Hoblin Модератор Сообщения: 1442 Статус: Etersoft team ОС: ALT Linux
Re: Параметры запуска программы
Сообщение Hoblin » 20.02.2009 15:24
А в чём проблема?
20.02.2009 15:21
$ wine C:\Sockterm\sockterm.exe user=user psw=1
Спасибо сказали:
watashiwa_daredeska Бывший модератор Сообщения: 4038 Статус: Искусственный интеллект (pre-alpha) ОС: Debian GNU/Linux
Re: Параметры запуска программы
Написать скрипт из одной строчки и запускать его:
#!/bin/sh exec sockterm.exe user=user psw=1
WARNING: передавать пароль в командной строке небезопасно: его видно всем.
Спасибо сказали:
user0zlt74 Сообщения: 102 ОС: Arch Linux — core Dump
Re: Параметры запуска программы
Сообщение user0zlt74 » 21.02.2009 10:35
20.02.2009 15:24
А в чём проблема?
20.02.2009 15:21
$ wine C:\Sockterm\sockterm.exe user=user psw=1
Не катит, к сожалению.
Еще вопрос — в свойствах виндового ярлыка можно поставить опцию «запускать программу в окне, развернутым на весь экран» — это можно как-то указать вайну ?
20.02.2009 15:26
Написать скрипт из одной строчки и запускать его:
#!/bin/sh exec sockterm.exe user=user psw=1
WARNING: передавать пароль в командной строке небезопасно: его видно всем.
А причем тут вайн ? всмысле где в скрипте будет вызываться вайн ?
Спасибо сказали:
watashiwa_daredeska Бывший модератор Сообщения: 4038 Статус: Искусственный интеллект (pre-alpha) ОС: Debian GNU/Linux
Re: Параметры запуска программы
21.02.2009 10:35
А причем тут вайн ? всмысле где в скрипте будет вызываться вайн ?
Хм. Ну, можете exec wine bla-bla-bla. В Debian виндовым бинарям достаточно сделать chmod +x и запускать как родные, думал это во всех современных дистрибутивах так — ведь плевое дело.
Спасибо сказали:
blackst0ne Сообщения: 528 Статус: ツ ОС: Ubuntu 9.04
Re: Параметры запуска программы
Сообщение blackst0ne » 24.02.2009 08:11
21.02.2009 10:35
Не катит, к сожалению.
А если в кавычки взять?
$wine «C:\Sockterm\sockterm.exe user=user psw=1»
Администрация! Пожалуйста, добавьте птичку «решено», а также соответствующую кнопку на ajax’е в теме (подробнее здесь).
Спасибо сказали:
user0zlt74 Сообщения: 102 ОС: Arch Linux — core Dump
Re: Параметры запуска программы
Сообщение user0zlt74 » 24.02.2009 08:50
24.02.2009 08:11
21.02.2009 10:35
Не катит, к сожалению.
А если в кавычки взять?
$wine «C:\Sockterm\sockterm.exe user=user psw=1»
не катит к сожалению, во время инсталяции этой софтины создается lnk-файл на десктопе. может туда что вписать можно ?
Спасибо сказали:
kovik65 Сообщения: 151 Статус: Сочувствующий ОС: openSUSE, FreeBSD, Windows Контактная информация:
Re: Параметры запуска программы
Сообщение kovik65 » 24.02.2009 12:10
wineconsole start «C:\Sockterm\sockterm.exe user=user psw=1»
. опыт, сын ошибок трудных .
Спасибо сказали:
user0zlt74 Сообщения: 102 ОС: Arch Linux — core Dump
Re: Параметры запуска программы
Сообщение user0zlt74 » 24.02.2009 13:02
24.02.2009 12:10
wineconsole start «C:\Sockterm\sockterm.exe user=user psw=1»
Нда не силен я в этом вайне . эта строчка мне о чем-то должна говарить ?
fixme:exec:SHELL_execute flags ignored: 0x00000500
?
Получаеться все как и пржде — запускаеться программа, начинает запрашивать лог и пасс.
Спасибо сказали:
Hoblin Модератор Сообщения: 1442 Статус: Etersoft team ОС: ALT Linux
Re: Параметры запуска программы
Сообщение Hoblin » 24.02.2009 13:53
У меня такое ощущение, что сама программа просто игнорирует аргументы. Куча работающих примеров есть на этом же форуме.
Спасибо сказали:
user0zlt74 Сообщения: 102 ОС: Arch Linux — core Dump
Re: Параметры запуска программы
Сообщение user0zlt74 » 24.02.2009 17:29
24.02.2009 13:53
У меня такое ощущение, что сама программа просто игнорирует аргументы. Куча работающих примеров есть на этом же форуме.
Она, родная, самая.. в виндах из cmd тоже нет возможности ее так запустить.
/usr/bin/xvkbd -xsendevent -text «user»;
/usr/bin/xvkbd -xsendevent -text «r»;
/usr/bin/xvkbd -xsendevent -text «1»;
/usr/bin/xvkbd -xsendevent -text «r»;
пока окно проги в фокусе (предпологаеться что эта софтина запускаеться последней и остаеться в фокусе)
ЗЫ: Спасибо всем ответившим
Источник: unixforum.org
Как в Ubuntu автоматически запускать файл с параметрами?
Все привет.
ОС — Ubuntu 16.04
И так. В папке есть исполняемый файл. Его запускаю через командную строку командой: ./name_file -c cp-conf.json . И далее скрипт выполняется циклично, пока его не выключить. После ребута системы, приходится заново проводить процедуру запуска. Подскажите, как сделать автоматическую загрузку скрипта с параметрами в командной строке чтобы этого не делать каждый раз ручками?
- Вопрос задан более трёх лет назад
- 1411 просмотров
10 комментариев
Оценить 10 комментариев
Чтобы с параметрами — написать скрипт.
Чтобы автоматически — прописать этот скрипт в автозагрузку.
Вопрос-то в чем?
подключи в ~/.bashrc или в ~/.profile свой файл через source
Adamos: вопрос в написании самого скрипта, который нужно положить в загрузку
Андрей: а можно для деревянных на пальцах?
#!/bin/bash /home/user/name_file -c /home/user/cp-conf.json
Всей хитрости — не забывать ко всему прописывать полные пути.
Gordon Frimen: у тебя есть файл командной оболочки который ранится при стартре, это .bashrc ты можешь подключить свой скрипт который будет раниться при старте www.linuxcenter.ru/lib/books/kostromin/gl_05_09.phtml
Всем спасибо. С этим более менее разобрался. Но вот автозагружаться в упор отказывается. Запускал, скрипт так работает, но после ребута не грузится. Подскажите правильные варианты реализации автозагрузки скрипта после ребута.
Итак. Давайте по порядку. Создал файл с расширение .sh содержащий -> структуру
#!/bin/bash
# Запуск
/home/user/opt/cpm -c /home/user/opt/cp-conf.json
Я правильно сделал? Если да, то как его теперь автоматически загрузить после загрузки графической оболочки системы? Должен запустить терминал в котором как раз и будет идти выполнение скрипта.
Андрей: можете подсказать подробнее на моем примере?
Андрей: а как правильно подключать скрипт в .bashrc?
Решения вопроса 1
как мелкий лайфхак можно на конфиг навесить флаги исполнения. а исполняемую прогу в сам конфиг прописать через shebang
#! /path/to/name_file -c
получается удобно.
но, с учетом будущего, лучше создать systemd.service скрипт c Type=oneshot.
Ответ написан более трёх лет назад
Можете рассказать подробнее как это сделать?
Нарисовать скрипт
/etc/systemd/system/my_name_file.service
с таким содержимым
[Unit] Description=My service for ./name_file -c cp-conf.json [Service] Type=simple ExecStart=/path/to/name_file -c /path/to/cp-conf.json [Install] WantedBy=multi-user.target
Как то так, простейший скрипт.
Далее реиндксируешь systemd скрипты и проверяешь работоспособность своего
$ sudo systemctl daemon-reload
$ sudo systemctl start my_service.service
если все ок включаешь в автозагрузку
$ sudo systemctl enable my_service.service
Type=simple т.к. у тебя процесс после запуска работает все время. измени если по другому
Если процесс нужно пускать от имени пользователя, то пропиши User
да и вообще почитай маны systemd они бездонные 🙂
pfg21: выполнил команду systemctl status miner.service вот что получил в ответе:
● miner.service — Miner_service for ./cpuminer -c cpuminer-conf.json
Loaded: loaded (/etc/systemd/system/miner.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Чт 2017-06-08 15:53:10 +07; 2min 29s ago
Process: 818 ExecStart=/path/to/cpuminer -c /path/to/cpuminer-conf.json (code=exited, status=203/EXEC)
Main PID: 818 (code=exited, status=203/EXEC)
июн 08 15:53:10 minerserv1 systemd[1]: Started Miner_service for ./cpuminer -c cpuminer-conf.json.
июн 08 15:53:10 minerserv1 systemd[1]: miner.service: Main process exited, code=exited, status=203/EXEC
июн 08 15:53:10 minerserv1 systemd[1]: miner.service: Unit entered failed state.
июн 08 15:53:10 minerserv1 systemd[1]: miner.service: Failed with result ‘exit-code’.
соотвествующие /path/to/cpuminer -c /path/to/cpuminer-conf.json правильно указывают на нужные файлы ??
просто лучше указывать все файлы с полными путями к ним, чтобы не было проблем
тут надо не тупо копировать, а правильно прописать пути
pfg21: понял. по статусу заработало но после ребута терминал не запускается и я не вижу выполнения скрипта. Как сделать чтобы запускался терминал и в нем было выполнение скрипта?
наверное можно как-нибудь, но это не правильно.
весь вывод автозапуска сливается в логи смотри их
$ journalctl -xe
$ journalctl -u miner.service
второе выдаст тебе что в сислог записано с твоего юнита.
pfg21: тогда это не подходит. это майнер. там столько данных выводится, что смысла нет. а какие есть варианты именной моей реализации? Чтобы после запуска системы запускался терминал и шел процес майнинга.
Gordon Frimen: наверное, автологин и автостарт програмки гденить да описан, но неправильно сие.
Кстати вспомнил, можно перенастроить вывод юнита в любое место, смотри systemd.exec
По твоему варианту удобнее будет перенаправить вывод на /dev/tty1 и он тебе будет сорить выводом майнера на экран сразу как скрипт стартует 🙂
без всяких входов и автологинов в систему.
а входить с клавиатуры будешь через второй терминал — alt-F2
Ответы на вопрос 1
ruby on rails web dev
В 14.04 — upstart
Начиная с 16.04+ — systemd
Ответ написан более трёх лет назад
Нравится 1 3 комментария
А можно по подробнее
Могу только в общих чертах описать, потому что на память не помню всех команд и деталей.
Надо создать upstart/systemd файл(ы), который(ые) описывает(ют):
1) какую команду(ы) он запускает
2) когда он их запускает — runlevel, запуск после того, как поднимется сетевой интерфейс или монтирование файловой системы — тут возможны различные варианты и комбинации.
3) описывает коллбэки — что сделать перед стартом, что сделать после старта, что сделать после остановки
4) описывает, перезапускать ли программу, если она падает, максимальное число попыток и т.д
5) описывает, запускать ли в виде демона или как-есть.
. и т.д и т.п — там хватает нюансов.
Поэтому, гугли в этом направлении. Точнее, к сожалению, не подскажу.
P.S, systemd пока сам до конца не осилил — уж больно от отличается от upstart, к которому я привык.
Есть гораздо более простой, но МЕНЕЕ предпочтительный вариант: rc.local.
1) Включаем rc.local
sudo systemctl enable rc-local.service
2) В /etc/rc.local пишем:
/path/to/name_file -c cp-conf.json
Здесь надо иметь ввиду, что желательно указывать полный путь до исполняемого файла, а также интерпретатор:
/usr/bin/python3 /path/to/script.py /bin/bash /path/to/script.sh
Источник: qna.habr.com