Unison e systemd timer problem

0

Eu tenho um problema pelo qual, se eu executar meu script bash eu uníssono funciona como esperado, quando o systemd o executa através de um serviço em um timer, então ele não funciona como esperado. Estou registrando a saída do executável unison e ele volta sem nada. O que poderia estar acontecendo aqui?

O script em questão é este ...

    #!/bin/bash

    echo "'date -u' 'unison "USB Work" -batch'" >> /home/tom/timer.log

... que quando executado a partir da linha de comando funciona perfeitamente. O arquivo é /usr/local/bin/unison.sync.usb-work.

Meu serviço /etc/systemd/system/unison-timer-usb-work.service se parece com isso ...

    [Unit]
    Description=Unison timer - sync work to USB

    [Service]
    Type=simple
    ExecStart=/usr/local/bin/unison.sync.usb-work

... o serviço é executado a cada 10 minutos com sucesso pelo seguinte temporizador (etc / systemd / system / unison-timer-usb-work.timer) ...

    [Unit]
    Description=Runs Unison USB Work sync script every 10 mins

    [Timer]
    # Time to wait after booting before we run first time
    OnBootSec=1min
    # Time between running each consecutive time
    OnUnitActiveSec=10min
    Unit=unison-timer-usb-work.service

    [Install]
    WantedBy=multi-user.target

Tudo isso parece estar configurado corretamente, systemctl list-timers mostra como ativo ...

    NEXT                          LEFT       LAST                          PASSED    UNIT                         ACTIVATES
    n/a                           n/a        lun 2015-08-03 08:50:25 CEST  8h ago    ureadahead-stop.timer        ureadahead-stop.service
    lun 2015-08-03 17:00:40 CEST  9min left  lun 2015-08-03 16:50:40 CEST  30s ago   unison-timer-usb-work.timer  unison-timer-usb-work.service

... e o arquivo /home/tom/timer.log obtém novas entradas em branco com um registro de data e hora a cada 10 minutos.

Por que o script funciona a partir do terminal (sem sudo e com sudo) e não do timer?!

Agradecemos antecipadamente por qualquer ajuda,

Tom.

    
por Tom Rhodes 03.08.2015 / 16:55

1 resposta

1

O systemd possui dois "modos": sistema e usuário. Quando o systemd está sendo executado como uma instância do sistema, tudo é, por padrão, executado como raiz. Quando o systemd está sendo executado como uma instância do usuário, tudo é executado como o usuário que iniciou a instância do systemd. Além disso, um conjunto limitado de variáveis é definido para serviços iniciados. Para a instância do sistema, apenas LANG e PATH são definidos por padrão (pelo menos no Ubuntu 15.04). Para a instância do usuário, além das variáveis anteriores, HOME , LOGNAME , SHELL e XDG_RUNTIME_DIR estão definidos.

No seu caso, com base na saída do processo, o processo deve ser executado na conta do usuário, não como raiz. A correção apropriada seria mover o arquivo de serviço para /etc/systemd/user ou ~/.config/systemd/user , para que o serviço fosse iniciado sob o systemd do usuário.

    
por saiarcot895 05.08.2015 / 03:05