Script shell imprimindo a variável $ USER em branco quando executada pelo Smartd

0

Eu criei um script que o daemon smartd (smartmontools) executa conforme o comando abaixo.

DEVICESCAN -a -m email -M test -M exec /usr/share/smartmontools/my-script -n stand...

O Smartd parece estar rodando como root, observando a saída do comando principal, mas não consegue encontrar um arquivo de configuração em / root. $ USER, $ HOME, whoami, exportar USER = $ (id -u -n) comandos não ecoam em nada, nem mesmo em uma linha vazia. Quando executado manualmente no terminal, imprime o nome de usuário atual como esperado. Script foi chmod'ed para 700.

Por que isso está acontecendo?

Editar: aqui está o script que quero executar.

#!/bin/sh

export USER=$(id -u -n)
echo $whoami
echo "USER: "
echo "$USER"
echo $HOME

EMAIL_EXEC="mailx"
EMAIL_ACCOUNT="gmail"
EMAIL_SUBJECT="simplified"
EMAIL_BODY="simplified"

echo "$EMAIL_BODY " | $EMAIL_EXEC -A $EMAIL_ACCOUNT -s "$EMAIL_SUBJECT" [email protected]

Após a reinicialização, os erros do smartd são encontrados no log e nenhum email é enviado diferente de quando executado manualmente como root.

sudo systemctl restart smartd
journalctl -u smartd

Aqui está a saída do journalctl log:

Test of /etc/smartmontools/run.d/email to [email protected] produced unexpected output (69 bytes) to STDOUT/STDERR:
USER:
root
Account 'gmail' does not exist.
No mail for root

export USER = $ (id -u -n) parece ter definido a variável $ USER como você mencionou. "gmail" é um perfil no arquivo /root/.mailrc. O mesmo erro é produzido durante a execução como usuário não raiz, porque o arquivo .mailrc está ausente na home page dos usuários.

Como posso definir a variável $ HOME como a variável $ USER? Isso pode dar uma ideia porque não está encontrando o arquivo.

    
por DominicM 07.03.2015 / 07:42

1 resposta

1

Seu maior problema foi que mailx , quando chamado de um script de shell executado por smartd , iniciado por systemd , no Arch Linux, não estava lendo o arquivo $HOME/.mailrc do usuário root.

Isso foi causado por alguns fatores:

  • O mailx no Arch Linux, s-nail , depende da variável de ambiente HOME ao procurar pelo arquivo .mailrc . Se HOME não estiver presente, ele usará o diretório de trabalho atual.
  if ((cp = getenv("HOME")) == NULL)
      cp = "."; /* XXX User and Login objects; Login: pw->pw_dir */
  homedir = savestr(cp); 

$USER, $LOGNAME, $HOME, $SHELL

User name (twice), home directory, and the login shell. The variables are set for the units that have User= set, which includes user systemd instances.

Como não havia nenhuma variável HOME no ambiente fornecido para smartd e provavelmente foi iniciado no diretório / , mailx não leu o arquivo /root/.mailrc .

Para corrigir: adicione a linha

export HOME=~

ou

export MAILRC=~/.mailrc

para o shell script antes de invocar mailx

ou (não testado por mim) adicione

User=root

à sub-rotina [Service] do seu arquivo de configuração da unidade smartd.service .

    
por 09.03.2015 / 18:44