
Из-за конфликтующих и постоянно меняющихся разрешений на смонтированных дисках (которые нелегко решить из-за структуры разработки программ), существует скрипт, который необходимо запускать с правами root.
Это можно сделать sudo /usr/serverm1/lsintd
и получить хорошие результаты. Однако мы хотим, чтобы этот скрипт запускался автоматически при запуске.
Запуск скрипта под нашим основным пользователем при запуске приводит к сбросу ядра из-за недостаточных прав. Поэтому мы решили, что можем установить его в crontab как @reboot /usr/serverm1/lsintd
(как предлагаетсяздесь, однако это запускает его с настройками и конфигурацией от root (которого не существует).
TLDR: Как можно запустить скрипт точно так же, как он будет запущен с командой sudo /usr/serverm1/lsintd
при запуске?
Я также попробовал применить его chmod u+x
к двоичному файлу, однако это все равно привело к дампу ядра, как будто он был запущен с обычными разрешениями (идея взята изразрешить пользователю запускать скрипт с правами root).
Примечание:Я признаю, что это в некоторой степени проблема XY, однако из-за медленной и плохо организованной структуры разработки некоторых других служб на нашем сервере у нас нет возможности решить основные проблемы и вместо этого приходится искать обходной путь.
решение1
Одним из способов было бы создание юнита systemd.
Все возможные варианты вы можете найти здесь:www.freedesktop.org/.../systemd.unit.html
но я собираюсь привести простой пример:
1. Давайте создадим скрипт bash, который будет записывать дату и время каждой загрузки системы в файл: /root/file
Только root
пользователь имеет права на запись и редактирование файлов в /root
каталоге.
Я собираюсь переключить пользователя на root
с помощью sudo su -
Давайте создадим скрипт /root/timelog.sh
и сделаем его исполняемымchmod +x /root/timelog.sh
#!/bin/bash
if ! [ /root/file ]; then touch /root/file; fi
echo $(date) >> /root/file
2.Теперь нам нужен System Unit
файл:/etc/systemd/system/timelog.service
[Unit]
Description=timelog.service
[Service]
Type=oneshot
ExecStart=/root/timelog.sh
[Install]
WantedBy=multi-user.target
3.Последняя задача — убедиться, что он запустится вместе с системой:
systemctl enable timelog