Я хотел бы запустить .sh
файл, используя bash при выходе из системы и выключении Ubuntu. Я искал в Интернете и нашел только исправления для KDE и GNOME. Сценарий прост, мне просто нужно знать, могу ли я добавить строку кода в файл «logoff / shutdown» или мне нужно сослаться на нее в другом сценарии.
30
systemd
), чтобы люди увидели его сверху.Ответы:
Чтобы выполнить скрипт при выходе из системы:
Добавьте следующую строку:
в
/etc/lightdm/lightdm.conf
файле.Вы должны перезапустить lightdm, чтобы это изменение вступило в силу. Для этого войдите в tty1, используя Ctrl+ Alt+ F1, войдите под своим именем пользователя и паролем и выполните следующую команду:
Примечание: использование Ctrl+ Alt+ , F7чтобы переключиться на графическую сессию
Чтобы выполнить скрипт после перезагрузки:
/etc/rc0.d
sudo chmod +x K99_script
K99
запуска в нужное время.Чтобы выполнить скрипт при выключении:
/etc/rc6.d
sudo chmod +x K99_script
K99
запуска в нужное время.Источники:
источник
K
для «убийства» иS
для «Start».K
для уровней выполнения 0, 1 и 6 иS
для уровней выполнения 2, 3, 4 и 5; ii) вам не нужно вызывать скриптK99_foo
, число просто определяет порядок запуска скриптов. Вам нужно выбрать тот, который больше остальных, если вы хотите, чтобы он запускался последним; iii) Уровень запуска 0 не для перезагрузки! ; Это для выключения. 6 для перезагрузки. iv) скрипты не должны быть в/etc/rcN.d
каталогах. Вместо этого они должны быть в/etc/init.d
и связаны с/etc/rcN.d
.Как это сделать с помощью systemd
Если вы найдете эту ветку после июня 2016 года, Ubuntu и его производные, включая Mint, будут использовать systemd для управления инициализацией и завершением работы системы. У меня были проблемы со старым подходом, поэтому я исследовал системный подход.
С помощью systemd вы создаете один или два файла для вызова ваших сценариев, используя приведенные ниже шаблоны, и выполняете команду. Просто.
Версия GUI
Сначала создайте сценарии, которые вы хотите запустить при запуске и / или завершении работы. Я создал .scopening_atstart и .scfullcopy_atend.
Затем убедитесь, что они оба исполняемые, щелкнув правой кнопкой мыши по файлу, выбрав свойства и убедившись, что в разделе разрешений вы отметили Разрешить выполнение файла как программы.
Два файла, которые я создал, заполняют и сохраняют содержимое виртуального диска. Они также создают файл в моем домашнем каталоге, чтобы доказать, что служба работает. Они были в форме:
Затем я открыл свой файловый менеджер как root, открыл
/etc/systemd/system
и создал файл startup.service и файл save-ramdisk.service. Очевидно, что вы можете выбрать свои собственные имена, и общие имена могли включать файл запуска с именем johns_start.service и файл завершения работы с именем johns_shutdown.service. Просто не выбирайте имена существующих сервисов.а также
Вы можете использовать те же служебные файлы, заменяя мой полный путь к исполняемому скрипту.
Наконец, для каждого из них выполните команду systemctl enable your_files_name (но без службы суффиксов). Так что мой первый был
systemctl enable startup
Перезагрузите компьютер один раз, чтобы запустить службы. Служба запуска будет выполняться всякий раз, когда systemd входит в многопользовательскую цель, и службу остановки, когда она выходит из многопользовательской цели. Альтернативные сервисные файлы с различными условиями активации будут описаны ниже.
CLI (командная строка) версия
В этом описании предполагается, что вы работаете из своего домашнего каталога, а не / home / john, используете sudo по мере необходимости и ваш выбор редактора, в котором я пишу vim или svim.
Создайте сценарии оболочки запуска и завершения работы с первой строкой
#!/bin/sh
и сделайте их исполняемыми с помощьюchmod +x my_new_filename
.Создайте два файла, как указано выше, или в этом примере один файл для обработки задач запуска и завершения работы. Я буду выполнять скрипты в своем домашнем каталоге, но @don_crissti показал некоторые альтернативы в Stack Exchange.
и скопируйте в файл содержимое:
Затем включите службу с помощью команды:
и перезагрузите систему, после чего службы будут активны. Команды
systemctl is-enabled start_and_stop
иsystemctl is-active start_and_stop
могут быть использованы в мониторинге ваших новых сервисов.Изменение условий запуска для выключения
Прежде всего, файлы используют открытие или закрытие многопользовательской среды для запуска сценариев. Файл ниже использует начало четырех возможных процессов выключения для запуска своих сценариев. Добавление или удаление целей в строке «До» + в строке «WantedBy» позволит вам сделать более четкие различия:
Этот файл был предложен @Matthias в Unix & Linux ответом, но я не смог его запустить, пока не добавил раздел «Установка».
Снова отредактируйте скрипт
/etc/systemd/service/
и включите его, используяsystemctl enable your_file_name
. Когда я изменил цели, я использовалsystemclt disable file_name
команду, а затем снова включил ее, что символически связало ее с целевыми каталогами. Перезагрузитесь и сервис будет работать.источник
man systemd.unit
созданными пользователем файлами могут быть размещены$XDG_CONFIG_HOME/systemd/user
и другие локальные пользовательские местоположения