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.