У меня есть скрипт в папке:
/path/to/my/script.sh
Мне нужно, чтобы этот скрипт запускался каждый раз при запуске системы (даже если никто не входит в систему). Что мне нужно сделать, чтобы это произошло?
У меня есть скрипт в папке:
/path/to/my/script.sh
Мне нужно, чтобы этот скрипт запускался каждый раз при запуске системы (даже если никто не входит в систему). Что мне нужно сделать, чтобы это произошло?
Вам понадобятся права суперпользователя для любого из следующих действий. Чтобы получить root, откройте терминал и выполните команду
sudo -i
и командная строка изменится на '#', указывая, что сеанс терминала имеет права суперпользователя.
/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
Создать /etc/init/myjob.conf
vi /etc/init/myjob.conf
с содержанием, подобным следующему
description "my job"start on startuptaskexec /path/to/my/script.sh
Официальное заявление от веб-сайт выскочки -> "Проект находится только в режиме сопровождения. Никаких новых функций не разрабатывается, и общим советом было бы перейти на другую минимальную систему инициализации или systemd."
Создайте новый сценарий в /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
не работает в вашем дистрибутиве.
с терминала
создать файл newshell.sh.desktop
в ~/.config/autostart
папка:
gedit ~/.config/autostart/newshell.sh.desktop
менять Exec
, Name
и Comment
значение и добавление в файл:первая строка
[Desktop Entry] Type=Application Exec=/full/link/to/your/newshell.sh Name=newshell Comment=whatever you want
сохранить
или
вы можете сделать это из графического интерфейса:
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