我正在尝试为每周五 18:00 后的自动更新系统编写一个 systemd 单元。如果我通过手动启动服务,一切都会正常工作systemctl start --user autoupd.service
。
* autoupd.service - Autoupdate system
Loaded: loaded (/home/user/.config/systemd/user/autoupd.service; static; vendor preset: enabled)
Active: inactive (dead) since Sat 2020-0704 17:26:52 MSK; 3s ago
TriggeredBy: * autoupd.timer
Process: 930 ExecStart=/user/bin/mate-terminal -e /home/user/.local/bin/update (code=exited, status=0/SUCCESS)
Main PID: 930 (code=exited, status=0/SUCCESS)
Jul 04 17:26:52 localhost systemd[372]: Started Autoupdate system.
Jul 04 17:26:52 localhost systemd[372]: autoupd.service: Succeeded.
但是,如果它启动的服务autoupd.timer
失败并出现奇怪的错误,我无法正确理解。
* autoupd.service - Autoupdate system
Loaded: loaded (/home/user/.config/systemd/user/autoupd.service; static; vendor preset: enabled)
Active: failed (Result: exit-code) since Sat 2020-0704 17:23:54 MSK; 1min 27s ago
TriggeredBy: * autoupd.timer
Process: 378 ExecStart=/usr/bin/mate-terminal -e /home/user/.local/bin/update (code=exited, status=1/FAILURE)
Main PID: 378 (code=exited, status=1/FAILURE)
Jul 04 17:23:53 localhost systemd[372]: Started Autoupdate system.
Jul 04 17:23:54 localhost mate-terminal[378]: Failed to parse arguments: Cannot open display:
Jul 04 17:23:54 localhost systemd[372]: ^[[0;1;39m^[[0;1;39mautoupdate.service: Main process exited, code=exiited, status=1/FAILURE
Jul 04 17:23:54 localhost systemd[372]: ^[[0;1;38;5;185m^[[0;1;39m^[[0;1;38;5;185mautoupdate.service: Failed with result `exit-code'
有谁知道为什么会发生这种情况以及如何解决这个问题?有我的资料来源:
/home/user/.config/systemd/user/autoupd.timer
[Unit]
Description=Autoupdate timer
[Timer]
OnCalendar=Sat 17:23
Persistent=true
Unit=autoupd.service
[Install]
WantedBy=timers.target
/home/user/.config/systemd/user/autoupd.service
[Unit]
Description=Autoupdate system
[Service]
Type=simple
ExecStart=mate-terminal -e "/home/user/.local/bin/update"
/home/user/.local/bin/update
#!/bin/sh
sudo pacman -Syu
echo ""
echo "Press Enter to exit..."
read
DISPLAY="" /home/user/.local/bin/update 的输出
user@localhost ~ DISPLAY="" /home/user/.local/bin/update
:: Synchronizing package databases...
core is up to date
extra 1676.8 KiB 9.63 MiB/s 00:00 [######################] 100%
community 5.0 MiB 8.87 MiB/s 00:01 [######################] 100%
multilib 163.6 KiB 9.40 MiB/s 00:00 [######################] 100%
:: Starting full system upgrade...
resolving dependencies...
looking for conflicting packages...
Packages (7) exempi-2.5.2-1 inkscape-1.0-5 libmagick6-6.9.11.23-1
libmpdclient-2.19-1 libvorbis-1.3.7-2 poppler-0.90.0-1
poppler-glib-0.90.0-1
Total Download Size: 22.69 MiB
Total Installed Size: 174.59 MiB
Net Upgrade Size: 0.12 MiB
:: Proceed with installation? [Y/n] n
Press Enter to exit...
答案1
所以,我不会经常给出“你做错了”的答案,但你可能不应该这样做。确实pacman
应该只手动调用。
一些更健康的替代品:
如果你想更新数据库文件,你可以去
pacman -Syy
:checkupdates
显示要更新的软件包列表,因此如果您愿意,您可以自己编写一些脚本。对于您的 RSS 阅读需求,我建议使用线人;它包括
Pre-Install
pacman 挂钩,如果您未将某些新闻标记为已读,则会中止任何 pacman 安装操作。
然而,如果你真的决定这样做,你将不得不使用可怕的旗帜--noconfirm
。
这将绕过任何“你确定吗?”消息。如果你安装线人如果发布一些新消息,pacman 仍然会中止,但这仍然被认为是“生活在边缘”,所以要注意。