Как я могу запускать скрипты автоматически при запуске Ubuntu, чтобы мне не приходилось запускать их вручную после запуска?
Один из подходов заключается в добавлении задачи @reboot cron:
Запуск crontab -e
позволит вам отредактировать ваш cron.
Добавьте в него следующую строку:
@reboot /path/to/script
выполнит этот скрипт после загрузки компьютера.
В зависимости от того, какие скрипты нужно запустить.. за услуги и как вы должны использовать выскочка. Но для скрипта пользователей они должны быть запущены как сессия скрипты гном! Посмотри в разделе Система и GT; предпочтения и GT; запуск приложений.
На стороне записки, Если вам нужны скрипты для запуска на вход терминала вы можете добавить их на .bash_login все файл в вашем домашнем каталоге.
Нужен простой команды (тот, который не'т продолжать бег) можно использовать выскочка работы, как:
start on startup
task
exec /path/to/command
Сохранить это в .файл Conf
в /etc/инит
(если вам это нужно, чтобы запустить как root при загрузке системы), или в `~/.конфиг/выскочка (если вам это нужно
для запуска в качестве пользователя, когда вы входите в игру).
Вы можете добавить команды из/etc/rc автомобиль.местные`:
sudo nano /etc/rc.local
Этот выполняет команды как root.
Для выполнения команд от имени определенного пользователя, используйте команду sudo -я -у(
-i, чтобы запустить оболочку). Например, чтобы установить постоянное SSH туннель, где окружения myhost, которая является definde в
johndoe в в ~/.файл SSH/config файл
:
sudo -i -u johndoe autossh -nNT -L 1234:localhost:1234 myhost
Обратите внимание, что если в/etc/файл RC.местные/была пуста, она не может существовать, так что вы должны добавить [притон линия](https://en.wikipedia.org/wiki/Shebang_%28Unix%29) на вершине (например,
#! /бин/Баш`), и убедитесь, что файл является исполняемым:
sudo chmod +x /etc/rc.local
Чтобы запустить (короткоживущих)<суп>1</с SUP> команда на запуск, используя systemd в
, Вы можете использовать блок инициализации по умолчанию для типа одноразовые
. Например, создать файл/etc/systemd в/системы/ФОО.услуг, содержащий:
[Unit]
Description=Job that runs your user script
[Service]
ExecStart=/some/command
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Затем выполните:
sudo systemctl daemon-reload
sudo systemctl enable foo.service
По сути, это просто преобразования типичный выскочка работа к systemd в один (см. systemd для пользователей выскочка).
Можно выполнять несколько команд из одной файловой службы, через несколько ExecStart линий:
[Service]
ExecStart=/some/command
ExecStart=/another/command some args
ExecStart=-/a/third/command ignore failure
Команда всегда должна быть дана с указанием полного пути. Если одна из команд не удается, остальные же'т бежать. -
Перед путь говорит нет причин продолжать игнорировать ненулевой статус выхода (не считая ее провал).
Актуальны:
Для сеансов пользователей, вы можете создать блок systemd в в ~/.конфиг/systemd в Вместо. Это должно работать с 16.04 года, но не ранее выпусков Ubuntu с systemd (поскольку эти выскочки до сих пор используется для сеансов пользователей). Сессии единицы пользователей могут управляться с теми же самыми командами как с системными службами, но с опцией
--пользователь добавил:
systemctl --user daemon-reload
systemctl --user status foo.service
Обратите внимание, что в отличие от выскочки, systemd в не'т выполнять команды метод exec* через оболочку. Он выполняет некоторые ограниченные вычисления переменной и нескольких команд (разделенных символом
;) сама по себе, но, что'ы об этом так далеко, как Shell-подобный синтаксис идет. На что-то более сложное, скажем перенаправление или трубы, обернуть команду в
Ш-с '...'или Баш-с '...'
.
<суп>1</хлебать>в отличие от долгоживущих демонов.
Существуют различные способы для автоматического запуска команд:
/и т. д./init
. Эти сценарии будут запущены при запуске системы (или в ответ на определенные события, например, запрос на выключение) и место для выполнения команд, которые не взаимодействуют с пользователем; все серверы начали использовать этот механизм. Вы можете найти читаемое введение в тему: http://upstart.ubuntu.com/getting-started.html страницы man человек 5 init
и `человек 8 инициализации дадим вам полную информацию.
Отметим, что сессия не начнется до тех пор, пока .сценарий gnomerc
завершена; поэтому, если вы хотите автозапуск некоторые долгоиграющие программы, нужно добавить &
для вызова программы, для того, чтобы отсоединить его от оболочки.
.сценарий gnomerc
, кроме вас, Дон'т должны знать ш
синтаксис (но ни вы можете использовать любые " ш " программная конструкция).$HOME/.config/autostart
Образец пример .файл рабочий стол
:
Поставив следующий .файл рабочий стол
в $дома/.файл config/автостарт и дал команду chmod +х
:
[Desktop Entry]
Type=Application
Exec="</path/to/script>"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Startup Script
Здесь в "</путь/к/скрипт>"
в заменяется на путь к вашему script.sh
<БР>(обычно рекомендуют /usr/местные/Бен
так что может быть выполнена путем непосредственного командования говорят универсальный
заменить " и</путь/к/скрипт>"
в).
Образец пример script.sh`:
#!/bin/bash
<commands to be executed>
exit
Результат:
.файл рабочий стол
будет запущен с$дома/.конфиг/автостарт, которые выполняют сценарий
метод exec=`
Таким образом, Вы можете запустить нужный скрипт при запуске!
Для простых вещей вы можете добавить команду в System->Preferences->Sessions, указывающую на расположение вашего скрипта.
Также вы можете добавить его в /etc/init.d/rc.local или сделать задание upstart, если это более низкий уровень.
Посмотрите на https://help.ubuntu.com/community/UbuntuBootupHowto для получения дополнительной информации.
ответ #хрон
реализованы различные сверху голосовал
Этот ответ до сих пор использует хрон
, но использует другой метод, чем топ-проголосовали ответ. Это работает начиная с Ubuntu 16.04, но, вероятно, гораздо раньше. Это's просто, что я начал использовать хрон
для выполнения задания, когда компьютер загружается с 16.04.
хрон
?В комментариях кто-то спрашивал "Когда же они бегут?&и". Вы можете сказать в syslog / journalctl:
$ journalctl -b | grep cron
Jan 02 16:54:40 alien cron[919]: (CRON) INFO (pidfile fd = 3)
Jan 02 16:54:40 alien cron[919]: (CRON) INFO (Running @reboot jobs)
Jan 02 16:54:40 alien systemd[1]: Started Run anacron jobs.
Jan 02 16:54:40 alien anacron[949]: Anacron 2.3 started on 2018-01-02
Jan 02 16:54:40 alien anacron[949]: Normal exit (0 jobs run)
Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[954]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[951]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[950]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[985]: (root) CMD ( /usr/local/bin/cron-reboot-cycle-grub-background)
Jan 02 16:54:40 alien CRON[954]: pam_unix(cron:session): session closed for user root
Jan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587
Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session closed for user root
Jan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587
Jan 02 16:54:40 alien CRON[950]: pam_unix(cron:session): session closed for user root
Одна вещь, чтобы отметить хрон
может вам по электронной почте статусе выполнения заданий и @перезагрузке выполнения заданий так рано диспетчер сети и электронной почты выиграл'т быть запущена, если вы положили на
сон` команду в скрипт(ы).
Положить скрипты в директорию /и т. д./cron.д
:
$ ll /etc/cron.d
total 44
drwxr-xr-x 2 root root 4096 Nov 26 19:53 ./
drwxr-xr-x 139 root root 12288 Dec 31 13:58 ../
-rw-r--r-- 1 root root 244 Dec 28 2014 anacron
-rw-r--r-- 1 root root 148 Feb 18 2017 cycle-grub-background
-rw-r--r-- 1 root root 138 Mar 5 2017 display-auto-brightness
-rw-r--r-- 1 root root 460 Nov 26 19:53 nvidia-hdmi-sound
-rw-r--r-- 1 root root 102 Feb 9 2013 .placeholder
-rw-r--r-- 1 root root 224 Nov 19 2016 touch-vmlinuz
-rw-r--r-- 1 root root 700 Aug 5 11:15 turn-off-hyper-threading
Вот пару скриптов у меня есть установки для запуска каждой загрузке:
$ cat /etc/cron.d/cycle-grub-background SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot root /usr/local/bin/cron-reboot-cycle-grub-background
$ cat /etc/cron.d/touch-vmlinuz
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot root touch "/boot/vmlinuz-"`uname -r`
Для этого следует использовать upstart. Upstart используется для процессов Ubuntu, которые запускаются автоматически. Это усовершенствованное решение, подобное старым скриптам System-V init.d. Он также позволяет вам вводить предварительные условия для запуска вашего скрипта (например, нужна ли вам работающая сеть? и т.д.).