O melhor lugar para colocar arquivos de unidades do sistema : /etc/systemd/system
adicione um destino na seção [Instalar], leia "Como ele sabe?" para detalhes. ATUALIZAÇÃO : /usr/local/lib/systemd/systemé outra opção, leia "Área cinzenta" para obter detalhes. "
O melhor lugar para colocar os arquivos da unidade do usuário : /etc/systemd/user ou $HOME/.config/systemd/user
mas depende das permissões e da situação.
A verdade é que as unidades do sistema (ou como a frase de introdução as chama de "configurações da unidade") podem ir a qualquer lugar - desde que você esteja disposto a fazer links simbólicos manuais e esteja ciente das advertências. Facilita a vida de colocar a unidade onde ela systemctl daemon-reloadpode ser encontrada por alguns bons motivos:
- Usar um local padrão significa que os geradores do systemd os encontrarão e os tornarão mais fáceis de ativar na inicialização
systemctl enable. Isso ocorre porque sua unidade será adicionada automaticamente a uma árvore de dependência de unidade (um cache de unidade).
- Você não precisa pensar em permissões, porque apenas os usuários privilegiados certos podem gravar nas áreas designadas.
Como ele sabe?
E como exatamente systemctl enablesabe onde criar o link simbólico? Você o codifica dentro da própria unidade na [install]seção. Geralmente, há uma linha como
[Install]
WantedBy = multi-user.target
que corresponde a um local predefinido no sistema de arquivos. Dessa forma, systemctlsabe que esta unidade depende de um grupo de arquivos de unidades chamado multi-user.target("target" é o termo usado para designar grupos de dependência de unidades. Você pode listar todos os grupos com systemctl list-units --type target). O grupo de arquivos de unidades a serem carregados com um destino é colocado em um targetname.target.wantsdiretório. Este é apenas um diretório cheio de links simbólicos (ou o real). Se a sua [Install]secção diz que é WantedByo multi-user.target, mas se um link simbólico para ela não existe no multi-user.target.wantsdiretório, então ele não irá carregar. Quando os geradores de unidades systemd adicionam seu arquivo de unidade ao cache da árvore de dependência na inicialização (você pode acionar geradores manualmente systemctl daemon-reload), ele automaticamente sabe onde colocar o link simbólico - nesse caso, no diretório/etc/systemd/system/multi-user.target.wants/ você deve habilitá-lo.
Pontos principais no manual:
Unidades adicionais podem ser carregadas no systemd ("vinculado") a partir de diretórios que não estão no caminho de carregamento da unidade. Veja o comando link para systemctl (1).
Em systemctl, procure por comandos de arquivo de unidade
Caminho de carregamento do arquivo de unidade
Os arquivos de unidade são carregados a partir de um conjunto de caminhos determinados durante a compilação, descritos nas duas tabelas abaixo. Os arquivos de unidade encontrados nos diretórios listados anteriormente substituem os arquivos com o mesmo nome nos diretórios inferiores da lista.
Quando a variável $SYSTEMD_UNIT_PATHé configurada, o conteúdo dessa variável substitui o caminho de carregamento da unidade. Se $SYSTEMD_UNIT_PATHterminar com um componente vazio (":"), o caminho normal de carregamento da unidade será anexado ao conteúdo da variável.
As tabelas 1 e 2 man systemd.unitsão boas.
Carregar caminhos ao executar no modo de sistema ( --system).
/etc/systemd/system Configuração local
/run/systemd/system Unidades de tempo de execução
/usr/lib/systemd/system Unidades de pacotes instalados
Caminho de carregamento ao executar no modo de usuário ( --user)
Há uma diferença entre as unidades por usuário e todas as unidades / usuários globais .
Dependente do usuário
$XDG_CONFIG_HOME/systemd/user Configuração do usuário (usada apenas quando $XDG_CONFIG_HOMEdefinida)
$HOME/.config/systemd/user Configuração do usuário (usada apenas quando $XDG_CONFIG_HOMEnão está definida)
$XDG_RUNTIME_DIR/systemd/user Unidades de tempo de execução (usadas apenas quando $XDG_RUNTIME_DIRconfiguradas)
$XDG_DATA_HOME/systemd/user Unidades de pacotes que foram instaladas no diretório inicial (usadas apenas quando $XDG_DATA_HOMEconfiguradas)
$HOME/.local/share/systemd/user Unidades de pacotes que foram instaladas no diretório inicial (usadas somente quando $XDG_DATA_HOMEnão está configurada)
--global (todos os usuários)
Unidades que se aplicam a todos os usuários - ou seja, pertencem a cada usuário também. Portanto, cada usuário pode interromper esses serviços, mesmo que um administrador os habilite na inicialização.
/etc/systemd/user Configuração local para todos os usuários ( systemctl --global enable userunit.service)
/usr/lib/systemd/user Unidades de pacotes que foram instaladas em todo o sistema para todos os usuários
/run/systemd/user Unidades de tempo de execução
Area cinza
Por um lado, o File Hierarchy Standard especifica que /etcé para configurações locais que não executam binários. Por outro lado, especifica que /usr/local/"deve ser usado pelo administrador do sistema ao instalar o software localmente". Você também pode argumentar (se não apenas para o propósito da organização) que todos os arquivos de unidade do sistema devem estar abaixo /usr/local/lib/systemd/system, mas isso é destinado a arquivos de unidade que fazem parte do "software" e não de um gerenciador de pacotes. As unidades de usuário do systemd correspondentes que abrangem todo o sistema podem ficar abaixo
/usr/local/lib/systemd/user.
/etc/systemd/systemé onde você colocar seus scripts, pacman coloca scripts de pacotes no/usr/lib/systemd/systeme emissãosystemctl enable foo.servicecria links simbólicos a partir/usrde/etc...