Як це зробити з systemd
Якщо ви знайдете цей потік після червня 2016 року, Ubuntu та його похідні, включаючи Mint, будуть використовувати systemd для управління ініціалізацією та відключенням системи. У мене були проблеми зі старим підходом, тому я досліджував системний шлях.
За допомогою systemd ви створюєте один або два файли для виклику сценаріїв за допомогою наведених нижче шаблонів та виконуєте команду. Простий.
Версія GUI
Спочатку створіть сценарії, які потрібно запустити при запуску та / або вимкненні. Я створив .scopening_atstart і .scfullcopy_atend.
Потім переконайтеся, що вони обидва виконувані, клацнувши правою кнопкою миші файл, вибравши властивості та переконайтесь, що в межах дозволів ви поставили галочку Дозволити виконання файлу як програми.
Два створені мною файли заповнюють і зберігають вміст рамдиска. Вони також створюють файл у моєму домашньому каталозі, щоб довести, що служба працює. Вони мали форму:
#!/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 вводить ціль для багатьох користувачів, а служба зупинки, коли вона виходить з цілі для багатьох користувачів. Альтернативні файли обслуговування з різними умовами активації будуть описані нижче.
Версія CLI (командного рядка)
Цей опис передбачає, що ви працюєте з домашнього каталогу, а не / 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
їх можна використовувати для моніторингу нових служб.
Зміна умов тригера для вимкнення
Файли перш за все використовують відкрите або закрите багатокористувацьке середовище для ініціювання запуску скриптів. У наведеному нижче файлі використовується початок чотирьох потенційних процесів відключення для ініціювання його сценаріїв. Додавання або видалення цілей у рядку "Перед" + рядок "WantedBy" дозволить вам зробити чіткіші розрізнення:
Цей файл був запропонований у відповіді на Unix & Linux @Matthias, але мені не вдалося змусити його працювати, поки я не додав розділ Install.
Знову ж відредагуйте скрипт /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