Flatpak 通过 cron 运行时不会更新其应用程序

Flatpak 通过 cron 运行时不会更新其应用程序

这个简单的脚本在手动启动时可以正确运行:

#!/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

经过这些修改,一切都顺利更新。真正的原因很可能不是权限本身,而是环境中的一些其他变化,但至少它不会让我重新安装一切。

如果有人认为这是一个坏主意,请解释原因。

相关内容