Тепер, коли варіанти Ubuntu та Mint перейшли до systemd, я виявив, що мої старі рішення на основі вищезазначеного є менш задовільними. Я шукав по Інтернету, щоб дізнатися, як це зробити з systemd і в кінцевому підсумку поєднуючи чужість і документуючи це як допис у блозі на blogspot.com.au, що містить наступний підручник.
За допомогою 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 .
vim /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" дозволить вам зробити чіткіші розрізнення:
Цей файл був запропонований у другій відповіді цієї публікації, але мені не вдалося змусити його працювати, поки я не додав розділ Встановити.
Знову ж відредагуйте скрипт /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