Этот простой скрипт работает правильно при ручном запуске:
#!/bin/sh
flatpak -y update 2>&1 >> ~/cron/cron-flatpak.log
При запуске 00 07 * * * sh ~/cron/cron-flatpak.sh
(того же обычного пользователя, а не root crontab) выводится следующее:
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
Это не столько решение, сколько обходной путь или возможная подсказка, но установка Chromium с --user
флагом (flatpak использует --system
его по умолчанию) и обновление в cron работают нормально.
flatpak install flathub org.chromium.Chromium # default, has cron issues
flatpak install --user flathub org.chromium.Chromium # no cron issues
К сожалению, я не уверен, почему возможность обновления системных flatpaks удалена из 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
, поэтому программы с графическим интерфейсом требуют особого обращения (читайте man xhost
).
cron
В crontab
файле Read можно задать переменные окружения для всех своих заданий man 5 crontab
.
Посмотрите на результаты echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
в каждой из ваших сред.
Поскольку command
часть строки crontab
по умолчанию интерпретируется как /bin/sh
, имеющий более простой синтаксис, чем /bin/bash
, я рекомендую сделать command
вызов скрипта bash
(исполняемого, монтируемого, запускаемого с #!/bin/bash
), который настраивает среду, а затем вызывает нужную программу.
решение3
Нашел дешевое и грязное решение: запустить flatpak через cron с помощью 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
С этими модификациями все обновляется без сучка и задоринки. Настоящая причина, скорее всего, не в привилегиях как таковых, а в каком-то другом изменении в среде, но, по крайней мере, это не заставляет меня переустанавливать все.
Если кто-то считает, что это плохая идея, пожалуйста, объясните почему.