Как мне запустить скрипт при запуске?

У меня есть скрипт в папке:

/path/to/my/script.sh

Мне нужно, чтобы этот скрипт запускался каждый раз при запуске системы (даже если никто не входит в систему). Что мне нужно сделать, чтобы это произошло?

Вам понадобятся права суперпользователя для любого из следующих действий. Чтобы получить root, откройте терминал и выполните команду

sudo -i

и командная строка изменится на '#', указывая, что сеанс терминала имеет права суперпользователя.

Альтернатива №1: Добавление команд в /etc/rc.local

vi /etc/rc.local

с содержанием, подобным следующему:

# This script is executed at the end of each multiuser runlevel/path/to/my/script.sh || exit 1   # Added by meexit 0

Альтернатива №2: Добавить начальное задание (для систем старше 15.04) (не рекомендуется)

Создать /etc/init/myjob.conf

vi /etc/init/myjob.conf

с содержанием, подобным следующему

description     "my job"start on startuptaskexec /path/to/my/script.sh

Официальное заявление от веб-сайт выскочки -> "Проект находится только в режиме сопровождения. Никаких новых функций не разрабатывается, и общим советом было бы перейти на другую минимальную систему инициализации или systemd."

Альтернатива №3: Добавьте сценарий инициализации (устарел)

Создайте новый сценарий в /etc/init.d/myscript.

vi /etc/init.d/myscript

(Очевидно, что это не обязательно должно называться "myscript".) В этом сценарии делайте все, что вы хотите сделать. Возможно, просто запустите упомянутый вами сценарий.

#!/bin/sh/path/to/my/script.sh

Сделайте его исполняемым.

chmod ugo+x /etc/init.d/myscript

Настройте систему инициализации для запуска этого скрипта при запуске.

update-rc.d myscript defaults

Вам не нужен root или даже вход в систему.

Вы можете отредактировать свою crontab (crontab -e) и создайте запись, подобную этой:

@reboot /path/to/script.sh

Таким образом, вы можете запустить его как обычный пользователь. @reboot просто означает, что он запускается при запуске компьютера (не обязательно только при его перезагрузке).

P.S.: Что касается комментариев о том, что это не работает должным образом

Некоторые говорят, что это не работает в дистрибутивах на базе Debian, таких как Ubuntu. Я лично успешно использовал этот метод как в Ubuntu, так и в Mint. Однако есть несколько вещей, которые следует учитывать.

То @reboot задания будут выполняться при запуске демона cron. Я обнаружил, что в дистрибутивах на базе Debian это может произойти до того, как /home раздел был смонтирован. Если сценарий, который вы запускаете, находится в вашей домашней папке, он завершится ошибкой.

Кроме того, это не ограничивается дистрибутивами на базе Debian, но если ваша домашняя папка зашифрована, она может быть расшифрована только после входа в систему. Вероятно, нет никакого способа обойти это.

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

Наконец, опять же, это не ограничивается дистрибутивами на базе Debian, но cron работает в гораздо более ограниченной среде, чем ваша оболочка. В частности, в PATH переменная имеет гораздо меньше путей. Возможно, что выполняемая команда не найдена, если она находится, например, в чем-то вроде $HOME/.local/bin, который может быть в вашем PATH в вашем сеансе оболочки, но не под cron. Возможно даже, что выполняемая команда зависит от какой-либо переменной среды, которая не задана в cron.

Итак, есть ряд причин, по которым ваша команда будет выполняться под управлением cron, но это не потому, что @reboot не работает в вашем дистрибутиве.

с терминала

  1. создать файл newshell.sh.desktop в ~/.config/autostart папка:

    gedit ~/.config/autostart/newshell.sh.desktop
  2. менять Exec, Name и Comment значение и добавление в файл:первая строка

     [Desktop Entry] Type=Application Exec=/full/link/to/your/newshell.sh Name=newshell Comment=whatever you want
  3. сохранить

или

вы можете сделать это из графического интерфейса:

  1. запустите инструмент "запуск приложений" в Ubuntu 14.04, вы просто вводите его в поле поиска.
  2. добавить то же самое Exec, Name и Comment.

Просто отредактируйте rc.local nano /etc/init.d/rc.local следующим образом:

/path/to/my/script.sh || exit 1 exit 0

У вас дома есть файл с именем .bashrc. Этот файл выполняется при открытии вашего сеанса.

Просто поместите что-то вроде этого в конец файла:

sh /path/to/your/script.sh

РЕДАКТИРОВАТЬ: извините, я не ответил на ваш вопрос, потому что мое решение выполняется, когда пользователь входит в систему...

Чтобы выполнить что-то перед входом в систему, вы можете попробовать rcconf или rc-file: http://www.debianadmin.com/manage-linux-init-or-startup-scripts.html