這個簡單的腳本在手動啟動時可以正確運作:
#!/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
中為所有作業設定環境變數。crontab
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種方法可以做到這一點;我添加了 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
透過這些修改,一切都會順利更新。真正的原因很可能不是特權本身,而是環境中的其他一些變化,但至少它不會讓我重新安裝所有內容。
如果有人認為這是一個壞主意,請解釋原因。