У меня возникли некоторые проблемы с этим, у меня есть скрипт, который должен запускать airodump-ng при загрузке, но обычно он запускает только первую часть скрипта и все.

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

Я пробовал это как в Arch Linux, так и в Debian, но в Debian я пошел по пути сценария инициализации, но сценарий не запускался от имени пользователя root.

Мой сценарий:

!#/bin/bash
ifconfig wlan0 down
sleep 5
airmon-ng start wlan0
sleep 5
airodump-ng mon0

exit 0

Сервисный файл:

[Unit]
Description=auto start airmon

[Service]
ExecStart=~/scripts/cap.sh
Type=oneshot
User=root


[Install]
WantedBy=multi-user.target

Редактировать * Это вывод из состояния systemctl:

ap.service - auto start airmon
Loaded: error (Reason: Invalid argument)
Active: inactive (dead)

Jan 13 13:03:44 alarmpi systemd[1]: [/etc/systemd/system/cap.service:5] Executable   path is not absolute, ignoring: ~/scripts/cap.sh
Jan 13 13:03:44 alarmpi systemd[1]: cap.service lacks ExecStart setting. Refusing.
Jan 13 13:47:08 alarmpi systemd[1]: [/etc/systemd/system/cap.service:5] Executable path is not absolute, ignoring: ~/scripts/cap.sh
Jan 13 13:47:08 alarmpi systemd[1]: cap.service lacks ExecStart setting. Refusing.

1 ответ1

2

Журнал на самом деле говорит вам, почему ваш сервис не запускается.

Это говорит о том, что сервисные единицы не являются скриптами оболочки. Вы не получаете, кроме некоторых очень специализированных элементов, таких вещей, как ~ расширения или переменные окружения в сервисных единицах. Имя, которое вы передаете в ExecStart должно быть обычным, абсолютным путем запуска программы. Ваше имя ~/system/cap.sh , которое (конечно) является относительным, а не абсолютным. Это не оболочка. ~ не метасимвол Это обычный символ, обозначающий некий предполагаемый подкаталог текущего каталога с именем ~ .

systemd отказывается принимать ExecStart с относительным именем пути. И он, очевидно, отказывается запускать сервис, у которого нет действительного ExecStart который описывает, как сервис запускается.

После исправления необходимо исправить сценарий, чтобы он действительно выполнялся надлежащим образом. Он должен иметь разрешение на выполнение и иметь #! правильно написано в первой строке. Также обратите внимание, что в этом нет ничего, что требовало бы оболочки Bourne Again, и было бы неплохо следовать указаниям Debian по использованию в скриптах, запускаемых как часть начальной загрузки системы, оболочки Almquist, а не оболочки Bourne Again.

Вы, вероятно, захотите настроить файл службы так, чтобы он не переключался с сетевыми интерфейсами параллельно с системой, инициализирующей их в первую очередь. Это означает, что это относится к вашей системе, поэтому вам нужно будет решить, что добавить в файл After= в вашем модуле.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .