待更新Snap Store

'Pending Update of Snap Store' 是怎么回事?

enter image description here


2有关Firefox的相关内容:https://askubuntu.com/questions/1412140/pending-update-of-firefox-snap-close-the-app-to-avoid-disruptions - Ciro Santilli OurBigBook.com
1这个问题已经被锁定,所以我无法添加新的回答。这里有一个更好的答案。我编写了一个脚本,可以检测应用程序何时关闭,并自动为您执行 snap refresh。https://gitlab.com/rahvee/snap-update - Edward Ned Harvey
2我提交了一个错误报告:https://bugs.launchpad.net/snap-store-desktop/+bug/1998233 像往常一样,解决这个问题的最佳方式是前往错误报告,在顶部附近点击“Does this bug affect you” > “Yes, it affects me”。 - bmaupin
我退出了Slack几秒钟,快照立即更新,哇,通知消失了! - Smile
11个回答

有几件事情正在发生。
首先,让我们谈谈最简单的方法来摆脱通知:
  1. 退出应用程序 - 在这种情况下是 snap-store(也称为 Ubuntu 软件)。由于 snap-store 在登录时自动启动,您可能不记得它已经打开了...但实际上是打开的。

    • 仅仅关闭窗口 并不能终止应用程序。

    • 一种方法:在命令行中运行 snap-store --quit

    • 另一种方法:打开 Ubuntu 软件,查看顶部栏,在顶部栏的左侧找到 "Ubuntu 软件"。点击它,然后选择 "退出"。 enter image description here

  2. 运行 sudo snap refresh。让命令完成。

    • 如果您仍然收到一个弹出窗口,提示需要刷新应用程序,那么运行 sudo snap refresh <application-name>
      该命令的输出将返回导致阻塞的 PID。
      使用 kill <pid> 来解除阻塞。
      再次运行 sudo snap refresh。这次应该可以正常工作。
  3. 现在可以安全地重新启动您的应用程序。

    • 如果您之前没有使用过该应用程序,或者不知道如何启动该应用程序,则可以安全地忽略此步骤。
首先,让我们谈谈为什么会发生这种情况:
Snapd会检测是否有新版本可用。如果应用程序当前正在运行,snapd将在最多14天内阻止更新该应用程序。
对于大多数应用程序来说,这个功能很好用。你退出一个应用程序,几个小时后snapd就会更新该应用程序(它每天检查几次)。下次打开应用程序时,你甚至都不会注意到它已经被更新了。太棒了!
但是有些应用程序会长时间运行,超过了这14天的限制。比如在笔记本电脑上关闭/暂停而不是退出/重新启动的网络浏览器。不幸的是,当14天的期限到期时,snapd会终止应用程序以实施升级。对用户来说,这看起来就像Firefox意外崩溃,丢失了他们正在做的任何事情。
Snapd必须刷新snaps。这是最初设计的遗留问题;snaps最初是为手机和物联网设备设计的,必须能够可靠地工作并且能够在没有用户输入的情况下进行可靠的更新。如果你知道如何禁用它,你可以禁用它...但对于大多数用户来说,这是一个坏主意--禁用更新意味着没有安全补丁和不安全的应用程序。

第三,让我们谈谈为什么你突然现在收到这些通知

Snap开发者对这两个选择(强制关闭应用程序以进行升级或完全禁用升级)不满意,所以他们创建了一种更好的方法:在方便时提醒用户退出应用程序。 这就是你看到的通知。 它在Ubuntu 22.04中是新功能(默认开启)。

  • 如果你忽略它,那么当倒计时达到零时,snapd将终止应用程序并自动刷新该snap。

最后,还有一个显而易见的问题: 为什么这不是自动的? 或者也可以说 为什么snapd不在纠缠你之前下载更新呢?

嗯,这还在不断改进中。Snapd开发者欢迎代码贡献来帮助实现这一点。Snapd是开源的。

  • 大多数遇到这个问题的人只是之前没有使用过长期使用的Snap打包的桌面应用程序。这是一个已知的问题,各种开发者正在解决它。欢迎你加入他们的行列。

评论不适合进行长时间讨论;此对话已被移至聊天室 - andrew.46
2这里的关键点非常简单。如果您退出snap,它将自动重新启动,并在启动时启动。当某个软件正在运行时,它无法更新该软件。所有这些答案都反映出需要发生的是停止snap,然后您可以使用cli来更新它本身。或者,您可以让它自己运行(我强烈怀疑)一两周后,它会强制自我更新。 - nerak99
36应用程序 snap-store 可以通过命令行关闭。执行 $ snap-store --quit 然后执行 $ sudo snap refresh 即可生效。 - Daniel
1谢谢回答。在检查进程标识符时要注意,因为有些进程可能是关键的(例如桌面环境)。我刚刚结束了它。 - Thecave3
2@Daniel 将你的建议添加到了答案中。谢谢! - user535733
你可能没有意识到你打开了它,但实际上你确实打开了。- 绝对没有打开,在登录后甚至没有打开或点击任何东西就发生了这个问题。 - Mendhak
@Mendhak 谢谢。编辑以指定snap-store在登录时自动启动。 - user535733
@raj 我不会说Snap还不够成熟,不能用于生产环境。例如,Certbot现在已经默认使用Snap在大多数Linux发行版上,并且在生产环境中运行得非常好。此外,rdap这个获取IP WHOIS信息的工具也可以直接在生产环境中正常使用。尽管有一些奇怪的更新问题,但仍然有很多Snap完全适合用于生产环境。这并不意味着你可以(至少在这里)简单地宣布"Snap还不够成熟,不能用于生产环境"。(1/2) - Thomas Ward
@raj(以LXD Snap为例:它已经稳定运行多年,可以用于生产环境)(2/2) - Thomas Ward
我想我们可以绕过这个问题的方法是禁用Snap商店的通知......或者在登录时不启动Snap商店。 在哪里开始讨论这个问题比较合适呢? - Fuseteam
@ThomasWard 我并不是指将个别应用程序打包成snaps。我是指snap作为一个软件分发系统还不够成熟。 - raj
我退出了,打开终端后弹出了一个窗口... sudo snap refresh 显示所有都是最新的。然后我再次打开Ubuntu软件,它显示了进程ID,我将其终止并成功使用了 'sudo snap refresh'。谢谢。 - xchiltonx
@Levente,这可能是您向Ubuntu提出的建议,看看他们是否可以修复用户体验。 - Thomas Ward

我遇到了同样的问题,通知显示涉及的是snap-store。
如果你在终端中运行这个命令,你会得到一个进程ID(PID):
sudo snap refresh snap-store
error: cannot refresh "snap-store": snap "snap-store" has running apps (ubuntu-software), pids:
       2452

然后在终端中终止该进程并重新运行它:
kill 2452
sudo snap refresh snap-store

而且它应该成功。

目前评价最高的答案建议您将其运行或最小化,但在我看来,它只是在没有用户启动的情况下运行,并且在Dock中不显示运行状态。 对我来说,这似乎是一个错误。 如前所述,在14天后通过终止该应用程序,问题应该可以自行解决,但如果您正在使用该应用程序,这可能会带来不便。

看起来还在进行中,所以也许需要一些耐心,但如果您没有耐心,可以按照此处描述的方式报告错误: https://help.ubuntu.com/community/ReportingBugs


2我假设在检查snap更新时它总是在运行。也许这是一个死锁,snap-store的更新应该以其他方式处理。 - smido
这个问题已经在这里报告了:snap-store 无法更新由于自动启动。 请前往该错误报告,在顶部附近点击Does this bug affect you > Yes, it affects me - Anton Samokat

适合我:
1. 在系统监视器中终止 "snap" 进程。 2. 执行以下命令更新系统并升级软件: ``` sudo apt update && sudo apt upgrade ``` 3. 执行以下命令刷新 snap 软件包: ``` sudo snap refresh ```

这是对我有效的方法。谢谢! - Nathaniel Hoyt
6killall snap-store - Tim Richardson
1在快照开发过程中,将了解使用的所有药物。 - Matteo Rossi
1步骤1:snap-store --quit - Danijel

# Close all open `snapd` process
sudo killall -s KILL snapd
sudo snap refresh

3在我看来,也许值得使用-SIGTERM | -TERM而不是KILL来允许优雅地关闭。 - Grigorii Chudnov
3如果您需要更新 snap-store 快照,请将 killall 中的 snap-store 替换为 snapd - fIwJlxSzApHEZIl
最好使用退出命令来关闭snap-store:snap-store --quit,而不是强制终止它。然后执行sudo snap refresh - Anton Samokat

这对我有用:
sudo snap remove snap-store
sudo snap refresh
sudo snap install snap-store

我需要在snap refresh前面加上sudo才能使其正常工作。这是我唯一有效的选择。我还不得不两次启动Ubuntu软件应用程序。
这也清除了一个无法更新的Snap Store挂起更新,因为Snap Store正在运行。

2其实我只需要第一行 - exebook
这有点过头了,你只需要关闭 snap-store - Fuseteam
@exebook 我的意思是...从技术上讲,如果你想让消息消失,那么这是正确的,但同时也会完全移除商店。这取决于你自己吧... - mpowered

关闭你的Ubuntu中的所有应用程序。打开Ubuntu软件应用程序,在更新部分下,逐个更新应用程序。这个技巧对我起了作用。

在我的情况下是一个“deja-dup待更新”快照...所以我的建议是打开终端并输入以下命令:
sudo killall deja-dup-monitor
sudo snap refresh
deja-dup&

(最新的命令运行deja-dup的图形界面,以便自动重新启动deja-dup-monitor)

我按照以下步骤解决了这个问题:
  1. 从图形界面注销并启动命令行会话(从系统登录页面按下CTR+ALT+F2)。
  2. 使用您的用户名和密码登录,并运行 sudo apt update && sudo apt upgrade 然后 sudo snap refresh
  3. 注销并重新启动Ubuntu图形界面(按下CTR+ALT+F)。
我猜测这个问题与gnome会话有关,似乎是在snap上运行。

请先关闭 Snap Store,然后运行 sudo snap refresh,Snap Store 将会自动更新。

1snap-store --quit 是离开 snap-store 的解决方案。 - Mih Zam

你只需要刷新快照商店。首先,你需要使用其pid终止它。

你可以通过运行sudo snap refresh来获取它,从输出信息中获取pid

error: cannot refresh "snap-store": snap "snap-store" has running apps
       (ubuntu-software), pids: 7274

运行:kill 7274。然后再次运行:sudo snap refresh。就这样! 更具体地回答问题,使用sudo snap refresh snap-store,通过定义应用程序名称。