Задать вопрос
Ответы пользователя по тегу Linux
  • Выполнение скрипта при выключении-перезагрузке, что не так?

    @oo22maxi Автор вопроса
    Решение для Ubuntu 15.10 (думаю в 15.04 и выше работает тоже):
    Так как Ubuntu имеет смешанную систему инициализации. В Ubuntu 14.10 и ниже - sysv и upstart, в Ubuntu 15.04 - upstart и systemd. тык


    Не забываем менять user на свой

    Создадим новый файл, я назвал его finish-yandex, с таким содержанием:
    [Unit]
    Description=Save Yandex config
    After=systemd-user-sessions.service
    
    [Service]
    ExecStop=/bin/bash '/home/user/.yandex_ram/finish-yandex.sh'
    Type=oneshot
    RemainAfterExit=yes
    
    [Install]
    WantedBy=multi-user.target reboot.target poweroff.target


    Немного о файле
    Unit - общая информация.
    Description - описание сервиса.
    After - задаёт порядок загрузки. В моём случае после старта сессии пользователя.
    
    Service - содержит информацию о службе
    ExecStop - Выполняет команду при остановке сервиса.
    Type - Типы службы. oneshot полезен для скриптов, которые выполняют одно задание и завершаются
    
    Install - когда юнит должен быть активирован


    finish-yandex.sh для теста содержит:
    #!/bin/sh
    echo "it works test" >> /home/user/.yandex_ram/test.log


    Делаем файл finish-yandex исполняемым:
    sudo chmod +x /home/user/.yandex_ram/finish-yandex

    Копируем файл в /etc/systemd/system с расширением *.service:
    sudo cp /home/user/.yandex_ram/finish-yandex /etc/systemd/system/finish-yandex.service


    Перезагружаем systemd для поиска новых или измененных юнитов:
    sudo systemctl daemon-reload

    Включаем юнит в автозапуск при загрузке системы:
    sudo systemctl enable finish-yandex.service

    Перезагружаемся и проверяем. У меня все заработало, файл test.log появился после перезагрузки.

    Что бы проверить для начало без перезагрузки, можно запустить и остановить юнит:
    sudo systemctl start finish-yandex.service
    
    sudo systemctl stop finish-yandex.service


    Для отключения юнита из автозапуск при загрузке системы:
    sudo systemctl disable finish-yandex.service

    Полезная ссылка о systemd - тык.
    Ответ написан
    1 комментарий