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フラグ(flatpak は--systemデフォルトで使用)を使用して Chromium をインストールし、更新すると cron で正常に動作します。

flatpak install flathub org.chromium.Chromium # default, has cron issues
flatpak install --user flathub org.chromium.Chromium # no cron issues

残念ながら、システム flatpak を更新する機能が cron で削除された理由はわかりません。少なくとも Chromium flatpak の場合は、3 番目の flatpak は更新できたようです。おそらく、問題はその特定の flatpak にあるのでしょう。

編集: 出力の 3 番目のエラーを見逃しましたが、これは 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/bashことをお勧めします。commandbash#!/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

これらの変更により、すべてが問題なく更新されます。実際の理由は、権限そのものではなく、環境のその他の変更である可能性が高いですが、少なくともすべてを再インストールする必要はありません。

もし誰かがそれが悪い考えだと思うなら、その理由を説明してください。

関連情報