Flatpak은 cron을 통해 실행될 때 앱을 업데이트하지 않습니다.

Flatpak은 cron을 통해 실행될 때 앱을 업데이트하지 않습니다.

이 간단한 스크립트는 수동으로 실행하면 올바르게 실행됩니다.

#!/bin/sh

flatpak -y update 2>&1 >> ~/cron/cron-flatpak.log

(루트 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에 나열된 버전과 일치하는 것처럼 보이지만 스크립트는 실행될 때마다 모든 것을 계속해서 업데이트하려고 시도합니다. 어떤 제안이 있으십니까?

예상 시간:좋아요 여러분, 저는 당신이 제안한 접근 방식을 테스트할 것이며 문제가 제대로 작동하게 된 후에 한 가지 답변 또는 다른 답변을 받아들이겠습니다. 매 반복마다 플랫허브에 출시된 새로운 앱 버전이 필요하기 때문에 시간이 좀 걸릴 것입니다.

답변1

해결 방법이나 가능한 단서만큼 해결책은 아니지만 플래그 ( 기본적으로 --userflatpak 사용 )를 사용하여 Chromium을 설치하고 업데이트하면 cron에서 제대로 작동합니다.--system

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

불행히도 시스템 flatpak을 업데이트하는 기능이 cron에서 삭제된 이유가 무엇인지 잘 모르겠습니다. 적어도 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. 예를 들어 가 없으므로 $DISPLAYGUI 프로그램에는 특별한 처리가 필요합니다(읽기 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

저렴하고 더러운 해결책을 찾았습니다 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

이러한 수정을 통해 모든 것이 문제 없이 업데이트됩니다. 실제 이유는 권한 자체가 아니라 환경의 다른 변화일 가능성이 높지만 적어도 모든 것을 다시 설치하게 만드는 것은 아닙니다.

누군가 그것이 나쁜 생각이라고 생각한다면 그 이유를 설명해주세요.

관련 정보