CentOS中/tmp目录的研究

《CentOS中/tmp目录的研究》

平时有时会想,centos到底有没有一个目录会定时清理? 考虑这个问题主是因为web页面缓存已经达到30G以上的级别,这个时候不得不考虑定时清理缓存的问题。博主印象中好像是有这么一个东西,但安不安全,效率如何,这个都是比较需要慎重考虑的。好了,下面就好研究这个有名的 “/tem”目录,看看到底符不符合需求。

百度了一下相关的资料,大概都在讲:/tem目录 ,CentOS7默认保留10天等等 , 好,下面开始研究相关的配置

//目录配置文件位于:
#cd /usr/lib/tmpfiles.d/
#ls
[root@localhost tmpfiles.d]# ls
cryptsetup.conf  httpd.conf        libselinux.conf  python.conf  selinux-policy.conf  systemd.conf          tuned.conf  zabbix-agent.conf
etc.conf         initscripts.conf  mysql.conf       rpm.conf     sudo.conf            systemd-nologin.conf  var.conf    zabbix-server.conf
fail2ban.conf    legacy.conf       pam.conf         sap.conf     svnserve.conf        tmp.conf              x11.conf

//其中tmp.conf就是配置文件,查看:
#cat 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

# 默认保留时间变为了10天,如果这10天内没做任何调整,会被处理
v /tmp 1777 root root 10d   //<<<<这一行是定义/tem目录的保留时间
v /var/tmp 1777 root root 30d //<<<<这一行是定义/var/tem目录的保留时间

# Exclude namespace mountpoints created with PrivateTmp=yes

#排除使用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



//我们可以配置这个文件,比如你不想让系统自动清理 “/tmp下以pagecache` 开头的目录,那么增加下面这条内容到配置文件中即可:
x /tmp/pagecache.*


//补充说明:
用php在/tmp生成的文件并不一定在/tmp目录的根目录下(PrivateTmp),而是在:
这样形式的目录下:systemd-private-xxx-php-fpm.service-xxxxx
是在进程对应文件目录下:
[root@localhost tmp]# ls
systemd-private-7d13b8352ade49abae0f5b3e72383674-nginx.service-cBEP95
systemd-private-7d13b8352ade49abae0f5b3e72383674-php-fpm.service-0bR0gz

tmpwatch命令

若想手动清理,清理的时候不要使用rm -rf命令,推荐使用tmpwatch命令来进行清理。



tmpwatch简介:tmpwatch 工具从指定的目录中递归地搜索,并删除在指定时间段内没有被访问的文件。tmpwatch 一般被用来清扫那些用来临时驻留文件的目录(譬如,/tmp)tmpwatch 忽略符号链接,它不会切换文件系统,而且只删除空目录和常规文件。
//安装:
#yum install -y tmpwatch


tmpwatch语 法:
tmpwatch [-afqv][--test][超期时间][目录...]
tmpwatch参数说明:
-a或--all  删除任何类型的文件。
-f或--force  强制删除文件或目录,其效果类似rm指令的"-f"参数。
-q或--quiet  不显示指令执行过程。
-v或--verbose  详细显示指令执行过程。
-test  仅作测试,并不真的删除文件或目录

//(清除/tmp下三小时以内没有使用的文件,并将结果输出)。
实例:sudo /usr/sbin/tmpwatch -afv 3 /tmp 

d:单位为天;
h:单位为小时;
m:单位为分钟;
s:单位为秒。

//删除 /tmp 目录下过去5小时内没有被访问的文件:
#tmpwatch 5 /tmp
//删除30天内没有被访问的文件:
#tmpwatch 30d /home/daygeek/Downloads
//将特定格式的文件排除在删除操作外
//删除指定文件下的所有10小时内未被改动的文件,除了 pdf 格式的文件
#tmpwatch -am 10 --exclude-pattern='*.pdf' /home/daygeek/Downloads


使用PrivateTmp属性有什么好处吗?

/tmp目录一般是所有用户和所有service都共享的,对于所有用户和service来说,都会有写和读的权限。那么这里会存在安全性的问题。把各个service的tmp目录隔离开的话,可以保证一定的安全性。 

《CentOS中/tmp目录的研究》

对于每个service的tmp目录,会在服务进程启动(start)时创建该目录,并且在关闭(stop)服务时删除该目录。如果我们是使用自己定义的临时目录路径的话,就需要我们自己定义相关的维护机制了(如:定期删除这些临时文件等),而使用这个PrivateTmp的话,就不需要我们自己去维护了。

怎么设置这个PrivateTmp属性呢?

//如果不希望每次重启php-fpm都会清理缓存(free -h机制),则需要关闭这个功能
//打个比方,现在我们要开启 or 关闭 php-fpm 的这个属性。
[root@localhost system]# service php-fpm status
Redirecting to /bin/systemctl status php-fpm.service
● php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
   Active: active (running) since 五 2021-08-27 04:12:01 CST; 6h ago
 Main PID: 18178 (php-fpm)
   Status: "Processes active: 0, idle: 11, Requests: 18491, slow: 0, Traffic: 0.2req/sec"
   CGroup: /system.slice/php-fpm.service
           ├─18178 php-fpm: master process (/etc/php-fpm.conf)
           ├─18179 php-fpm: pool www
           ├─18180 php-fpm: pool www
           ├─18181 php-fpm: pool www
           ├─18182 php-fpm: pool www
           ├─18183 php-fpm: pool www
           ├─18187 php-fpm: pool www
           ├─19010 php-fpm: pool www
           ├─19349 php-fpm: pool www
           ├─23404 php-fpm: pool www
           ├─24619 php-fpm: pool www
           └─24627 php-fpm: pool www

8月 27 04:12:01 localhost.localdomain systemd[1]: Starting The PHP FastCGI Process Manager...
8月 27 04:12:01 localhost.localdomain systemd[1]: Started The PHP FastCGI Process Manager.

//到PrivateTmp并修改之。
//ps:xx.service这种文件叫做unit文件,systemd把一个服务相关的启动脚本叫做一个unit文件,如果要查看更多service文件的编写规则,可以搜索"systemd unit" or "systemd unit 文件编写" 这类的关键字 or man systemd.unit 。
#vi /usr/lib/systemd/system/php-fpm.service
# It's not recommended to modify this file in-place, because it
# will be overwritten during upgrades.  If you want to customize,
# the best way is to use the "systemctl edit" command.

[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/php-fpm
ExecStart=/usr/sbin/php-fpm --nodaemonize
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true    //<<<<<<<将PrivateTmp=true 改为 PrivateTmp=false 即可
RuntimeDirectory=php-fpm
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target


systemctl daemon-reload
点赞

发表评论

邮箱地址不会被公开。 必填项已用*标注