Como executar o script bash como root na inicialização?

0

Estou tendo alguns problemas com isso, eu tenho um script que deve iniciar o airodump-ng na inicialização, mas normalmente só executa a primeira parte do script e é isso.

Eu tentei criar um arquivo de serviço systemd e ativá-lo, mas o script não é executado como root.

Eu tentei isso no arch linux e debian, mas no debian eu fui a rota do script de inicialização, mas ainda assim o script não seria executado como root.

Meu script:

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

exit 0

Arquivo de serviço:

[Unit]
Description=auto start airmon

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


[Install]
WantedBy=multi-user.target

Editar * Esta é a saída do status do 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.
    
por Skilo Skilo 13.01.2014 / 21:29

1 resposta

2

A revista está realmente dizendo por que seu serviço não será iniciado.

O que ele está dizendo é que as unidades de serviço não são scripts de shell. Você não obtém, além de alguns itens muito especializados, coisas como ~ de expansões ou variáveis de ambiente em unidades de serviço. O nome que você passa para ExecStart deve ser o caminho comum e absoluto do programa a ser executado. Seu nome é ~/system/cap.sh , que é (obviamente) um caminho relativo não absoluto. Este não é o shell. ~ não é um metacaractere. É um caractere comum, denotando algum subdiretório do diretório atual chamado ~ .

O systemd se recusa a aceitar um ExecStart com um nome de caminho relativo. E recusa-se, obviamente, a iniciar um serviço que não tem um ExecStart válido que descreva como o serviço é iniciado.

Depois de consertar isso, você precisa consertar seu script para que seja realmente um script apropriadamente executável. Ele precisa ter permissão de execução e ter #! escrito corretamente na primeira linha. Note também que não há nada sobre isso que requeira o shell Bourne Again, e é uma boa idéia seguir Debian's A vantagem de usar o shell Almquist em vez do shell Bourne Again em scripts é executada como parte do bootstrap do sistema .

Você provavelmente desejará ajustar seu arquivo de serviço para que ele não mexa nas interfaces de rede em paralelo com o sistema que as inicializa em primeiro lugar. O que isso significa é específico do seu sistema , então você terá que descobrir o que colocar como um After= no seu arquivo de unidade.

    
por 14.01.2014 / 23:52