这个简单的脚本在手动启动时可以正确运行:
#!/bin/sh
flatpak -y update 2>&1 >> ~/cron/cron-flatpak.log
当使用(相同的常规用户,而不是 root crontab)运行时00 07 * * * sh ~/cron/cron-flatpak.sh
,它会产生以下内容:
Looking for updates…
1. org.chromium.Chromium.Codecs stable u flathub < 1.1 MB
2. org.chromium.Chromium.Locale stable u flathub < 112.8 kB (partial)
3. org.qbittorrent.qBittorrent stable u flathub < 8.3 MB
Updating 1/3…
Warning: Failed to get revokefs-fuse socket from system-helper: Flatpak system operation GetRevokefsFd not allowed for user
Updating 1/3… ██▌ 13% 41.1 kB/s
Updating 1/3… ████████████████████ 100% 674.8 kB/s
Updating 1/3… ████████████████████ 100% 674.8 kB/s
Updating 2/3…
Warning: Failed to get revokefs-fuse socket from system-helper: Flatpak system operation GetRevokefsFd not allowed for user
Updating 2/3… ████████████████████ 100% 592 bytes/s
Updating 3/3…
Warning: Failed to get revokefs-fuse socket from system-helper: Flatpak system operation GetRevokefsFd not allowed for user
Updating 3/3… ████████████████████ 100% 0 bytes/s
Updates complete.
之后,版本似乎与 flathub.io 上列出的版本相匹配,但脚本每次运行时都会尝试一遍又一遍地更新所有内容。有什么建议吗?
预计到达时间:好的,我会测试你们建议的方法,等我设法让事情正常运转后,我会接受其中一个答案。这需要一段时间,因为每次迭代都需要在 flathub 上推出一个新的应用版本。
答案1
这不是一个解决方案,而是一个变通方法或可能的线索,但是使用标志安装 Chromium --user
(flatpak--system
默认使用)并在 cron 中更新工作正常。
flatpak install flathub org.chromium.Chromium # default, has cron issues
flatpak install --user flathub org.chromium.Chromium # no cron issues
不幸的是,我不确定为什么 cron 中不再提供更新系统 flatpak 的功能 —至少对于 Chromium flatpak 而言,因为看起来第三个 flatpak 刚刚能够更新。也许问题出在那个特定的 flatpak 上。
编辑:我错过了输出中的第三个错误,它不是 Chromium 独有的。
编辑 2:只是一些关于使用 flatpak--user
标志的进一步说明/步骤。由于系统和用户包是分开管理的,这意味着添加/删除远程、安装和更新也必须分开进行。用户包不能从系统远程拉取,反之亦然。
# add a user remote
flatpak remote-add --if-not-exists --user REMOTE_NAME REMOTE_ADDRESS
# updates just user packages
flatpak update --user
答案2
通过cron
、 或at
或运行的作业batch
不会在桌面上的同一运行时环境中运行。您的任何PATH
更改或其他环境变量设置都不会自动传播到您的cron
作业。例如,没有$DISPLAY
,因此 GUI 程序需要特殊处理(阅读man xhost
)。
cron
人们可以在crontab
文件 Read中为所有作业设置环境变量man 5 crontab
。
echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
查看每个环境中的结果 。
由于command
该行的一部分crontab
默认由 解释/bin/sh
,其语法比 更简单/bin/bash
,因此我建议command
调用一个bash
脚本(可执行、已安装、以 开头#!/bin/bash
)来设置环境,然后调用所需的程序。
答案3
找到了一个便宜又粗糙的解决方案:通过 cron 运行 flatpak sudo
。至少有 3 种方法可以做到这一点;我选择了sudoers
像这样添加 flatpak:
Cmnd_Alias FLATPAK = /usr/bin/flatpak
myusername ALL=(ALL) NOPASSWD: FLATPAK
脚本相应改变:
#!/bin/sh
sudo /usr/bin/flatpak -y update 2>&1 >> ~/cron/cron-flatpak.log
经过这些修改,一切都顺利更新。真正的原因很可能不是权限本身,而是环境中的一些其他变化,但至少它不会让我重新安装一切。
如果有人认为这是一个坏主意,请解释原因。