Eu li que existem duas pastas para arquivos de unidade (não no modo de usuário).
/usr/lib/systemd/system/: units provided by installed packages
/etc/systemd/system/: units installed by the system administrator
Conflito com esse entendimento está a seguinte resposta: https://unix.stackexchange.com/a/47715/33386 . Alguém pode preencher as informações que faltam para que eu entenda o que está acontecendo? ( ATUALIZAÇÃO: a resposta foi atualizada e meu entendimento não conflita mais com ela. )
Além disso, parece que os scripts estão organizados em subpastas dentro da /etc/systemd/system/
pasta:
getty.target.wants
multi-user.target.wants
Em outro local, li que existem outros locais. Parece que estes são para serviços específicos do usuário.
/usr/lib/systemd/user/ where services provided by installed packages go.
/etc/systemd/user/ where system-wide user services are placed by the system administrator.
~/.config/systemd/user/ where the user puts its own services.
Atualização 2015-08-31:
Para o bem de outras pessoas, aqui está um link para uma pergunta relacionada que eu fiz recentemente: Onde coloco scripts executados por unidades systemd?
systemd
directory-structure
Jonathan Komar
fonte
fonte
/etc/systemd/system
é onde você colocar seus scripts, pacman coloca scripts de pacotes no/usr/lib/systemd/system
e emissãosystemctl enable foo.service
cria links simbólicos a partir/usr
de/etc
...man systemd.target
: explica o raciocínio por trás dos agrupamentos.Respostas:
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-reload
pode ser encontrada por alguns bons motivos:systemctl enable
. Isso ocorre porque sua unidade será adicionada automaticamente a uma árvore de dependência de unidade (um cache de unidade).Como ele sabe?
E como exatamente
systemctl enable
sabe onde criar o link simbólico? Você o codifica dentro da própria unidade na[install]
seção. Geralmente, há uma linha comoque corresponde a um local predefinido no sistema de arquivos. Dessa forma,
systemctl
sabe que esta unidade depende de um grupo de arquivos de unidades chamadomulti-user.target
("target" é o termo usado para designar grupos de dependência de unidades. Você pode listar todos os grupos comsystemctl list-units --type target
). O grupo de arquivos de unidades a serem carregados com um destino é colocado em umtargetname.target.wants
diretório. Este é apenas um diretório cheio de links simbólicos (ou o real). Se a sua[Install]
secção diz que éWantedBy
omulti-user.target
, mas se um link simbólico para ela não existe nomulti-user.target.wants
diretó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 manualmentesystemctl 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:
Em systemctl, procure por comandos de arquivo de unidade
Caminho de carregamento do arquivo de unidade
As tabelas 1 e 2
man systemd.unit
sã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 instaladosCaminho 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_HOME
definida)$HOME/.config/systemd/user
Configuração do usuário (usada apenas quando$XDG_CONFIG_HOME
não está definida)$XDG_RUNTIME_DIR/systemd/user
Unidades de tempo de execução (usadas apenas quando$XDG_RUNTIME_DIR
configuradas)$XDG_DATA_HOME/systemd/user
Unidades de pacotes que foram instaladas no diretório inicial (usadas apenas quando$XDG_DATA_HOME
configuradas)$HOME/.local/share/systemd/user
Unidades de pacotes que foram instaladas no diretório inicial (usadas somente quando$XDG_DATA_HOME
nã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çãoArea 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
.fonte
/etc/systemd/system
, é esse conselho geral para arquivos de unidade criados automaticamente? Qualquer coisa instalada por um gerenciador de pacotes deve sempre colocá-los dentro,/usr/lib/systemd/system
por exemplo./etc/systemd/user
por serviços de usuário (garantidos) em todo o sistema e~/.config/systemd/user
por serviços específicos de usuário personalizados./etc/systemd/system
é onde você coloca seus scripts, o pacman coloca scripts de pacotes/usr/lib/systemd/system
.A emissão
systemctl enable foo.service
cria links simbólicos de/usr
para/etc
. Consulte a seção Caminho de carga da unidademan systemd.unit(5)
para obter mais detalhes.fonte
Escrevi 3, um para
ntpd
, um para um segundo cartão Ethernet estático e outro para execuçãop0f
, o identificador passivo do SO. Eu coloquei todos eles/etc/systemd/system
. Parece que eu poderia deixarsystemd
lidar com as coisas do NTP, mas acho que não quero confiar muito nisso.fonte