MyTetra Share
Делитесь знаниями!
Выполнить скрипт при выходе из системы
20.03.2019
23:07
Автор: alensav
Текстовые метки: скрипт, выход, системы
Раздел: MyTetra - Ubuntu_Command

Выполнить скрипт при выходе из системы / перезагрузке / завершении работы в Ubuntu

Навигация по ответам

26

Я хочу запустить файл .sh , используя bash для выхода из системы и завершения работы Ubuntu. Я искал в Интернете и нашел только исправления для KDE и GNOME. Сценарий прост, мне просто нужно знать, могу ли я добавить строку кода в файл «logoff / shutdown» или если мне нужно ссылаться на него в другом скрипте.     

scripts reboot logout shutdown

задан DirtyDenimDan 10.05.2013 в 03:13 источник

2 ответа

18

Чтобы выполнить скрипт при выходе из системы:

Добавьте следующую строку:

session-cleanup-script=/path/to/script
 

в файле /etc/lightdm/lightdm.conf .

Вам нужно перезапустить lightdm, чтобы это изменение вступило в силу. Для этого перейдите в tty1, используя Ctrl + Alt + F1 , войдите в систему с вашим именем пользователя и паролем и выполните следующую команду:

sudo service lightdm restart
 

Примечание: используйте Ctrl + Alt + F7 , чтобы перейти к графическому сеансу

Чтобы выполнить сценарий при перезагрузке:

  1. Поместите свой скрипт в /etc/rc0.d
  2. Сделать его исполняемым: sudo chmod +x K99_script
  3. Примечания:
  • Сценарии в этом каталоге выполняются в алфавитном порядке.
  • Имя вашего скрипта должно начинаться с K99 для запуска в нужное время.

Чтобы выполнить сценарий при завершении работы:

  1. Поместите свой скрипт в /etc/rc6.d
  2. Сделать его исполняемым: sudo chmod +x K99_script
  3. Примечания:
  • Сценарии в этом каталоге выполняются в алфавитном порядке.
  • Имя вашего скрипта должно начинаться с K99 для запуска в нужное время.

Источники:

  • Где разместить сценарий выхода для LightDM?
  • Ссылка

ответ дан Radu Rădeanu 24.07.2013 в 10:55

11

Как это сделать с помощью systemd

Если вы найдете эту тему после июня 2016 года, Ubuntu и ее производные, включая Mint, будут использовать systemd для управления инициализацией и выключением системы. У меня были проблемы со старым подходом, поэтому он исследовал путь systemd.

С помощью systemd вы создаете один или два файла для вызова своих сценариев, используя приведенные ниже шаблоны, и выполните команду. Простой.

Версия GUI

Сначала создайте сценарии, которые вы хотите запустить при запуске и / или завершении работы. Я создал .scopening_atstart и .scfullcopy_atend.

Затем убедитесь, что они оба исполняются, щелкнув правой кнопкой мыши файл, выбрав свойства и убедившись, что под разрешениями вы отметили «Разрешить выполнение файла как программу».

Два созданных мной файла заполняют и сохраняют содержимое ramdisk. Они также создают файл в моем домашнем каталоге, чтобы доказать, что служба работает. Они имели форму:

#!/bin/sh
cp -pru /home/john/zRamdisk/subdirectory1/* /home/john/.wine/drive_c/subdirectory1/
rm /home/john/stop_time
date +%D' '%T > /home/john/stop_time
 

Затем Я открыл свой файловый менеджер как root, открыл /etc/systemd/system и создал файл startup.service и файл save-ramdisk.service. Очевидно, вы можете выбрать свои собственные имена, а общие имена могли включать в себя файл запуска johns_start.service и файл выключения, называемый johns_shutdown.service. Просто не выбирайте существующие имена сервисов.

[Unit]
Description=Startup Applications

[Service]
Type=oneshot
RemainAfterExit=false
ExecStart=/home/john/.scopening_atstart

[Install]
WantedBy=multi-user.target
 

и

[Unit]
Description=Save Ramdisk to Wine drive C

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/john/.scfullcopy_atend

[Install]
WantedBy=multi-user.target
 

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

Наконец для каждого из них выполните команду systemctl enable your_files_name (но без службы суффиксов). Итак, мой первый был systemctl enable startup

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

Версия командной строки (командной строки)

В этом описании предполагается, что вы работаете из своего домашнего каталога, а не / home / john, используйте sudo по мере необходимости и ваш выбор редактора, где я пишу vim или svim.

Создать сценарии запуска и завершения работы с первой строкой #!/bin/sh и сделать их исполняемыми с помощью chmod +x my_new_filename .

Создайте два файла, как указано выше, или в этом примере один файл для работы с задачами запуска и завершения работы. Я буду выполнять скрипты в своем домашнем каталоге, но @don_crissti показал некоторые альтернативы в Stack Exchange.

svim /etc/systemd/system/start_and_stop.service
 

и скопируйте содержимое файла:

[Unit]
Description=Run Scripts at Start and Stop

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/home/john/.startup_commands  #your paths and filenames
ExecStop=/home/john/.shutdown_commands

[Install]
WantedBy=multi-user.target
 

Затем Включить службу с помощью команды:

systemctl enable start_and_stop
 

и перезагрузите систему, после чего службы будут активны. Команды systemctl is-enabled start_and_stop и systemctl is-active start_and_stop могут использоваться для мониторинга ваших новых сервисов.

Изменение условий триггера для выключения

Файлы, прежде всего, используют открытую или закрытую многопользовательскую среду для запуска запуска скриптов. В приведенном ниже файле используется начало четырех потенциальных процессов выключения для запуска его скриптов. Добавление или удаление целей на линии Before line + WantedBy позволит вам сделать более точные различия:

Этот файл был предложен в ответ на Unix & amp; Linux by @Matthias, но мне не удалось запустить его, пока я не добавил раздел «Установка».

Снова отредактируйте скрипт в /etc/systemd/service/ и включите его, используя systemctl enable your_file_name . Когда я сменил цели, я использовал команду systemclt disable file_name , а затем снова включил ее, которая привязала ее к целевым каталогам. Перезагрузитесь, и служба будет работать.

[Unit]
Description=Do something required
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
# This works because it is installed in the target and will be
#   executed before the target state is entered
# Also consider kexec.target

[Service]
Type=oneshot
ExecStart=/home/john/.my_script  #your path and filename

[Install]
WantedBy=halt.target reboot.target shutdown.target
      
Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования