如果目录设置在/tmp下可能会出现如下问题:
tmp_file显示的目标文件是/tmp/xxx.而这个文件实际放在linux的目录却是/tmp/systemd-private-xxxxx-php-fpm.service/xxx
原因
只要使用Systemd这个进程作为启动进程的linux系统,其子进程都会有PrivateTmp这么一个属性,用于设置是否使用私有的tmp目录。
那么只要设置使用这个属性的service,都会使用私有的tmp目录。
也就是用service 启动的命令,例如 :
service nginx restart nginx会有一个systemd-private-xxx-nginx.service/tmp目录
service php-fpm restart php-fpm会有一个systemd-private-xxx-php-fpm.service/tmp目录
利用systemctl找到对应的service路径。:
systemctl status php-fpm
找到PrivateTmp并修改成false,然后用命令
systemctl daemon-reload
重新加载systemctll配置
就可以正常在/tmp/XXX目录下生成文件了.
这个问题最初是在设置session的时候发现的,因为session的目录,用php-fpm设置的路径是/tmp/session,报错,没有session文件在这个下面,后面查到了这边