この単純なスクリプトは、手動で起動すると正しく実行されます。
#!/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
ジョブの環境変数を設定できます。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つの方法があります。私は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
これらの変更により、すべてが問題なく更新されます。実際の理由は、権限そのものではなく、環境のその他の変更である可能性が高いですが、少なくともすべてを再インストールする必要はありません。
もし誰かがそれが悪い考えだと思うなら、その理由を説明してください。