Unison 和 systemd 计时器问题

Unison 和 systemd 计时器问题

我遇到了一个问题,如果我自己运行 bash 脚本,unison 会按预期工作,但当 systemd 通过计时器上的服务运行它时,它却无法按预期工作。我正在记录 unison 可执行文件的输出,但没有任何结果。这里可能发生了什么?

有问题的脚本是这样的...

    #!/bin/bash

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

...从命令行运行时运行良好。文件是 /usr/local/bin/unison.sync.usb-work。

我的服务 /etc/systemd/system/unison-timer-usb-work.service 看起来像这样...

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

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

...该服务由以下计时器 (etc/systemd/system/unison-timer-usb-work.timer) 每 10 分钟成功运行一次...

    [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

所有这些似乎都设置正确,systemctl list-timers 显示它处于活动状态......

    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

...并且 /home/tom/timer.log 文件每 10 分钟获取一次带有时间戳的新空白条目。

为什么脚本可以从终端运行(不使用 sudo 和使用 sudo)而不是从计时器运行?!

在此先感谢您的帮助,

汤姆。

答案1

systemd 有两种“模式”:系统和用户。当 systemd 作为系统实例运行时,默认情况下,所有内容都以 root 身份运行。当 systemd 作为用户实例运行时,所有内容都以启动 systemd 实例的用户身份运行。此外,还为启动的服务设置了一组有限的变量。对于系统实例,默认情况下仅设置LANGPATH(至少在 Ubuntu 15.04 上)。对于用户实例,除了前面的变量外,还设置了HOME、、LOGNAME和。SHELLXDG_RUNTIME_DIR

就您而言,根据进程的输出,进程应该在用户帐户下运行,而不是以 root 身份运行。正确的解决方法是将服务文件移动到 或/etc/systemd/user~/.config/systemd/user以便服务在用户的 systemd 下启动。

相关内容