
平时有时会想,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目录隔离开的话,可以保证一定的安全性。

对于每个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