如何删除RTMP创建的子目录?PHP因权限过高无法操作的解决办法
解决思路
调整目录权限让PHP可操作
- 修改Nginx运行用户,让它和PHP使用同一个用户组。比如PHP用
www-data的话,在Nginx主配置里添加user www-data;,重启Nginx后,生成的子目录权限会和PHP兼容,就能直接用PHP删除。 - 直接指定HLS目录的权限:在RTMP的HLS配置块里加入
Hls_dir_permissions 0755;和Hls_permissions 0644;,这样生成的子目录同组用户拥有读写执行权限,只要PHP和Nginx在同一用户组,就能正常操作目录。
用Nginx事件触发脚本清理
在RTMP配置里利用on_publish_done事件,调用shell脚本删除对应子目录:
rtmp { server { listen 1935; application live { live on; hls on; hls_nested on; hls_continuous on; hls_path /path/to/hls; on_publish_done { exec /usr/local/bin/clean_live_dir.sh $name; } } } }
然后编写clean_live_dir.sh脚本:
#!/bin/bash DIR="/path/to/hls/$1" if [ -d "$DIR" ]; then rm -rf "$DIR" fi
给脚本添加执行权限:chmod +x /usr/local/bin/clean_live_dir.sh,这样直播结束时Nginx会自动调用脚本删除对应子目录。
定时任务清理过期目录
如果不想改动Nginx配置,就写个定时脚本,扫描HLS存储目录,删除长时间没有更新的子目录:
#!/bin/bash # 删除60分钟内没有修改的直播目录 find /path/to/hls -type d -mmin +60 -exec rm -rf {} \;
把脚本加到crontab,设置每小时执行一次:
crontab -e # 加入下面一行 0 * * * * /usr/local/bin/clean_expired_dir.sh
内容的提问来源于stack exchange,提问作者Jun Su
相关产品推荐
相关产品推荐

