Como adiciono o ~ / bin ao PATH para um serviço systemd?

2

Eu tenho um serviço systemd que chama um script PHP que cria uma sessão tmux na inicialização.

Globalmente, eu tenho o mais atual tmux para a distro (V > = 2.5).
O USER do script tem $HOME/bin/tmux de 2,0

O que eu preciso é que esse systemd use o binário tmux no $ HOME do usuário.
Eu defini o USER & Variáveis GROUP no arquivo de serviço systemd mas parece chamar o binário globalmente instalado.

É possível definir explicitamente o binário que deve ser chamado para esta chamada de serviço?

Se possível, prefiro não começar a codificar o caminho no próprio arquivo PHP.

Muito obrigado.

    
por Mark 13.03.2018 / 11:00

2 respostas

1

Parece terrivelmente arrogante, mas a introdução de uma $PATH update parece funcionar.
Eu estou à procura de efeitos colaterais no entanto. . .

Exemplo:

ExecStart=/bin/bash -c "PATH=/home/someUser/bin:$PATH exec /usr/bin/php /some/path/to/a/script.php"
    
por Mark 13.03.2018 / 11:51
2

Você pode codificar o PATH no serviço systemd:

[Service]
Environment=PATH=/home/someUser/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Mais flexível seria o PAM. É terrivelmente indireto comparado a simplesmente usar bash -c '....' , mas você pode fazer isso com o PAM.

Crie uma nova configuração do PAM em /etc/pam.d (digamos, /etc/pam.d/foo ) e adicione:

session    required     pam_env.so user_envfile=some-file user_readenv=1

E em /home/someUser/some-file , adicione:

PATH DEFAULT=/home/someUser/bin:${PATH}

Naturalmente, você pode ajustar o nome some-file para algo mais sensato, mas o caminho em user_envfile deve ser relativo ao diretório pessoal do usuário (o usuário que você definiu em User= no serviço).

Em seguida, no arquivo de serviço, na seção [Service] , adicione ( foo sendo o arquivo em /etc/pam.d criado anteriormente):

PAMName=foo

Agora, quando você iniciar o serviço (após recarregar, etc.), os session modules em /etc/pam.d/foo serão executados, o que neste caso é apenas pam_env . pam_env carregará variáveis de ambiente de /etc/environment , sujeito a restrições em /etc/security/pam_env.conf e, em seguida, o ambiente do usuário a partir de ~/some-file . Como PATH é definido como um valor padrão em /etc/environment , o ambiente do usuário é adicionado a esse valor padrão.

Aqui, o valor padrão de user_envfile é .pam_environment , que também é lido pela configuração do PAM de outras coisas como SSH ou login do LightDM, etc. Eu usei um arquivo diferente aqui caso você não queira afeta essas coisas. Você pode remover o user_envfile=... e usar o padrão ~/.pam_environment . você também pode usar apenas uma configuração existente do PAM em /etc/pam.d , que possui user_readenv=1 , mas outros módulos PAM podem causar efeitos colaterais indesejados.

    
por muru 13.03.2018 / 14:10