自动启动 Systemd 服务

自动启动 Systemd 服务

我最近在我的 PC 上安装了 FreeFileSync,并设法让 RealTimeSync 完美运行。剩下要做的就是在启动时自动调用脚本。最初,我使用带有 @reboot 参数的 Cron,但没有成功。所以我决定改用 systemd。我创建了一个名为 sync.service 的用户服务文件,我已启用它,当通过 systemctl --user start sync_1 命令手动调用时,它运行良好。但是,它在启动时遇到错误。有人可以吗?我不确定我哪里做错了。

[Unit]
After=network.service

[Service]
Environment="DISPLAY=:0"
ExecStart=/home/user/Desktop/sync.sh

[Install]
WantedBy=default.target

下面是我在启动后检查 systemd 文件状态时遇到的错误。

sync_1.service 已加载:已加载(/etc/xdg/systemd/user/sync_1.service;已启用;供应商预设:已启用)活动:失败(结果:退出代码)自 2020-06-14 星期日 21:19:19 BST 起;47 秒前进程:1859 ExecStart=/home/user/Desktop/sync.sh(代码=exited,状态=255/EXCEPTION)主 PID:1859(代码=exited,状态=255/EXCEPTION)

答案1

您的.service文件包含DISPLAY:=0,它是指向 X 服务器屏幕 0 的指针。

但是,X 服务器不会在系统启动时启动,而是在您执行 GUI 登录后才启动。

因此,当/home/user/Desktop/sync.sh在系统启动时尝试与 X 服务器处理进行通信时DISPLAY:=0,没有 X 服务器,并且事情会变得非常糟糕。

.desktopX 服务器相关任务的启动应该由中的文件完成$HOME/.config/autostart/。阅读man desktop-file-edit desktop-file-validate。使用 查找示例locate .desktop。阅读“桌面条目规范”https://freedesktop.org/wiki/Specifications/desktop-entry-spec/

相关内容