Загрузочные Spring построена Tomcat файлы каталог темпа не могут быть удалены привести к загрузке - Анализ проблемы

1, проблема

После Нового года, некоторые операторы сказали операция кулисы реакции сотрудников не может загружать фотографии, а затем просмотреть журнал, найти содержание ошибки /tmp/tomcat* 目录不存在.

Окружающая среда:

  • ботинки весны 1.5.15
  • Centos7.6 (Aliyun)

    2, проблема решена

  1. Почему это /tmp/tomcat*?
  2. Этот /tmp/tomcat*каталог не существует , почему?

2.1 Почему мы должны использовать это /tmp/tomcat*?

По умолчанию, весна загрузки встроенного в Tomcat, будет /tmpсоздавать две директории /tmp/tomcat*и файлы закачивать, используется этот каталог для хранения компилируются JSP.

2,2, то /tmp/tomcat*каталог не существует , почему?

Поскольку не существует механизм, с помощью Linux не очищаются.

Этот механизм является то , что работает: Во-
первых , мы имеем от службы , systemd-tmpfiles-cleanчтобы начать.

[root@djx ~]# systemctl  status  systemd-tmpfiles-clean
● systemd-tmpfiles-clean.service - Cleanup of Temporary Directories
   Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.service; static; vendor preset: disabled)
   Active: inactive (dead) since Tue 2020-02-25 09:10:36 CST; 12h ago
     Docs: man:tmpfiles.d(5)
           man:systemd-tmpfiles(8)
  Process: 21819 ExecStart=/usr/bin/systemd-tmpfiles --clean (code=exited, status=0/SUCCESS)
 Main PID: 21819 (code=exited, status=0/SUCCESS)

Feb 25 09:10:36 djx systemd[1]: Starting Cleanup of Temporary Directories...
Feb 25 09:10:36 djx systemd[1]: Started Cleanup of Temporary Directories.

Мы можем видеть эту услугу сегодня, 9:00 выполнение один раз, мы продолжаем видеть, что служба, соответствующая команда выполнения?

cat  /usr/lib/systemd/system/systemd-tmpfiles-clean.service
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-readahead-collect.service systemd-readahead-replay.service local-fs.target time-sync.target
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemd-tmpfiles --clean
IOSchedulingClass=idle

Давайте помнить , что этот заказ выполнен /usr/bin/systemd-tmpfiles --clean, мы пришли под опеку, сервис , связанный с таймером/usr/lib/systemd/system/systemd-tmpfiles-clean.timer

cat  /usr/lib/systemd/system/systemd-tmpfiles-clean.timer 
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

Мы знаем , что это 启动后的15分钟或者距离上一次执行一天будет выполняться на нашей команде /usr/bin/systemd-tmpfiles --clean.

Тогда вышеприведенная команда специфичны и сделал то , что? Мы man systemd-tmpfilesнашли некоторые вещи в.

DESCRIPTION
       systemd-tmpfiles creates, deletes, and cleans up volatile and temporary files and directories, based on the configuration file format and location
       specified in tmpfiles.d(5).

       If invoked with no arguments, it applies all directives from all configuration files. If one or more filenames are passed on the command line, only
       the directives in these files are applied. If only the basename of a configuration file is specified, all configuration directories as specified in
       tmpfiles.d(5) are searched for a matching file.

Из приведенного выше описания я получил два сообщения:

  1. Systemd-tmpfiles используется для создания и очистки временных файлов и каталогов.
  2. Systemd-tmpfiles получит конфигурационный файл из tmpfiles.d в.

Конечно, мы man systemd-tmpfilesможем также понять некоторые команды параметров.

Затем мы видим , tmpfiles.dчто мы man tmpfiles.dможем видеть в tmpfiles.dконфигурации ролей используются для очистки временных файлов и каталогов. Мы также можем увидеть его в хранилище конфигурации

/etc/tmpfiles.d/*.conf
/run/tmpfiles.d/*.conf
/usr/lib/tmpfiles.d/*.conf

Здесь мы можем увидеть файл конфигурации, в которой соответствующие примечания.

Затем мы пошли в трех каталогах , перечисленных выше, смотрите , чтобы увидеть , если расчистке связанных /tmpвещей.
Наконец, /usr/lib/tmpfiles.d/tmp.confтам можно найти,

cat /usr/lib/tmpfiles.d/tmp.conf 
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# See tmpfiles.d(5) for details

# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d

# Exclude namespace mountpoints created with PrivateTmp=yes
x /tmp/systemd-private-%b-*
X /tmp/systemd-private-%b-*/tmp
x /var/tmp/systemd-private-%b-*
X /var/tmp/systemd-private-%b-*/tmp

Мы можем посмотреть на двух из этих конфигураций

v /tmp 1777 root root 10d  # 就是当 /tmp 目录不存在的时间进行创建(权限为777,用户和用户组为root),并清理/tmp下超过10天的文件。
x /tmp/systemd-private-%b-*  # 忽略清理的目录
X /tmp/systemd-private-%b-*/tmp # 这个只忽略目录,但不忽略该目录下面的内容

Это означает , что чистый до /tmpболее чем 10 дней не изменил каталог файлов, но не убирает /tmp/systemd-private-%b-*и /tmp/systemd-private-%b-*/tmp.
Обобщить система будет автоматически убирать / TMP каталог в течение 10 дней не изменял файлы и каталоги

Во время Нового года наш каталог Tomcat генерироваться не изменится, если 10 дней, он также будет удален.

В-третьих, решение

Springboot изменить конфигурацию, не /tmpсоздать каталог

Параметры конфигурации:server.tomcat.basedir

Измените файл механизм очистки / TMP ниже

В /usr/lib/tmpfiles.d/tmp.confследующем повышенииx /tmp/tomcat*

Четыре, пружинный загрузочный официальный ответ

Официальный связанный с этим вопрос:

  • https://github.com/spring-projects/spring-boot/issues/5009
  • https://github.com/spring-projects/spring-boot/issues/9616

В https://github.com/spring-projects/spring-boot/issues/9616,
в нижней части мы можем

You can see the list of releases that contain the fix in the commit that closed this issue. In the 2.1.x line it was fixed in 2.1.4.

См 2.1.4 версии решить эту проблему. В версии серии, мы можем видеть в 1.5.20 также исправления, GitHub соответствующие фиксации записи

Ссылка: https: //www.cnblogs.com/samtech/p/9490166.html

рекомендация

отwww.cnblogs.com/operationhome/p/12375003.html
рекомендация