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

這與其說是一種解決方案,不如說是一種解決方法,或者可能的線索,但使用標誌--user--system預設使用 flatpak)安裝 Chromium 並在 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 只能更新。也許問題出在那個特定的扁平包裝上。

編輯:我錯過了輸出中的第三個錯誤,它並不是 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)。

可以在Read 檔案cron中為所有作業設定環境變數。crontabman 5 crontab

echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias查看每個環境中的結果 。

由於預設情況下,command該行的部分由 解釋,它的語法比 更簡單,因此我建議調用一個腳本(可執行文件,已安裝,以 開頭)來設定環境,然後調用所需的程式。crontab/bin/sh/bin/bashcommandbash#!/bin/bash

答案3

找到了一個廉價而骯髒的解決方案:透過 cron 運行 flatpak sudo。至少有3種方法可以做到這一點;我添加了 flatpak ,如下所示sudoers

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

透過這些修改,一切都會順利更新。真正的原因很可能不是特權本身,而是環境中的其他一些變化,但至少它不會讓我重新安裝所有內容。

如果有人認為這是一個壞主意,請解釋原因。

相關內容