如何解决这个问题:[WARN] shiny-server - 无法删除日志文件 /var/log/shiny-server/file.log

How to resolve this: [WARN] shiny-server - Failed to delete log file /var/log/shiny-server/file.log

我正在使用 Google 云 运行 部署一个 docker 容器。 docker 容器包含一个 R shiny 应用程序。查看应用程序一段时间后,我在云 运行 日志中看到以下内容:

[WARN] shiny-server - Failed to delete log file /var/log/shiny-server/shiny-server-xxx.log: EPERM: operation not permitted, unlink '/var/log/shiny-server/shiny-server-xxx.log'

我希望它能够删除旧日志,这样它就不会堆积在容器中,并且 阻止此警告发生。我该如何做到这一点?是权限错误吗?我试着为此寻找解决方案,但我什至没有看到有人抱怨这个错误。为什么我会得到这个? “取消链接”日志文件是什么意思?请告诉我我缺少什么以允许日志文件 removed/deleted。谢谢你给我的任何信息。

/usr/bin/shiny-server.sh中,前几行包含:

# Make sure the directory for individual app logs exists
mkdir -p /var/log/shiny-server
chown shiny.shiny /var/log/shiny-server

我的etc/shiny-server/shiny-server.conf是原文件(我没有做任何改动):

# Instruct Shiny Server to run applications as the user "shiny"
run_as shiny;

# Define a server that listens on port 3838
server {
  listen 3838;

  # Define a location at the base URL
  location / {

    # Host the directory of Shiny Apps stored in this directory
    site_dir /srv/shiny-server;

    # Log all Shiny output to files in this directory
    log_dir /var/log/shiny-server;

    # When a user visits the base URL rather than a particular application,
    # an index of the applications available in this directory will be shown.
    directory_index on;
  }
}

在我的 Dockerfile 中,我有:

RUN ["chmod", "+x", "/usr/bin/shiny-server.sh"]
EXPOSE 3838

RUN sudo chown -R shiny:shiny /srv/shiny-server
USER shiny

CMD ["/usr/bin/shiny-server.sh"]

注意:带有“USER shiny”的行帮助删除了日志中的警告,该警告指出该应用程序应 运行 作为非 root。

================================

更新

我已将 /usr/bin/shiny-server.sh 文件更改为:

mkdir -p /var/log/shiny-server
chown -R shiny:shiny /var/log/shiny-server

但我仍然看到日志:

[WARN] shiny-server - Failed to delete log file /var/log/shiny-server/shiny-server-shiny-20210831-133933-46421.log: EPERM: operation not permitted, unlink '/var/log/shiny-server/shiny-server-shiny-20210831-133933-46421.log'

/var/log/shiny-server 文件夹的当前权限如下所示:

虽然与错误中所述的日志文件不完全相同,但这是 /var/log/shiny-server 中日志文件本身的权限:

这难道不是允许 shiny 用户删除日志文件的足够权限吗?

检查你的/usr/bin/shiny-server.sh。要递归更改给定目录中所有文件和目录的所有权,您应该使用 -R 选项。此外,在单个命令中更改用户和组的所有权时,您应该使用 冒号.

/usr/bin/shiny-server.sh中试试这个:

chown -R shiny:shiny /var/log/shiny-server

检查此 document 以获取 chown 命令参考。

对于任何寻找我的 post 答案的人,我基本上都没有理它,而忽略了那些警告。根据 @Dondi 的评论,日志不应用完分配给我容器的所有 space,因为它会在实例空闲时关闭它。此外,闪亮的日志会自动写入标准输出(我使用 rocker/shiny 作为我的基本图像)所以我不会丢失闪亮应用程序写入的任何日志。