如何配置Cron任务修改动态路径下的文件权限
如何配置Cron任务修改动态路径下的文件权限
嘿,这个情况我太懂了——第三方工具的目录结构没法改,版本号还天天变,手动改权限真的烦死人!其实不用symlink也能搞定,给你分享个靠谱的方案:
第一步:写个自动找最新版本目录的脚本
咱们先搞个shell脚本,让它自动定位到最新的版本文件夹,再修改目标文件的权限。创建一个叫fix-perms.sh的文件,内容如下:
#!/bin/bash # 工具的基础目录,就是版本文件夹的父目录 BASE_DIR="/foo/bar" # 要修改权限的目标文件名 TARGET_FILE="FILE_TO_MODIFY" # 找出所有以v开头的版本目录,按版本号自然排序(比如v1.10.0会排在v1.9.0后面),取最后一个(最新的) LATEST_DIR=$(ls -d "$BASE_DIR"/v* 2>/dev/null | sort -V | tail -n 1) # 先检查目录和文件是否存在,避免报错 if [ -n "$LATEST_DIR" ] && [ -f "$LATEST_DIR/$TARGET_FILE" ]; then # 这里替换成你需要的权限命令,比如改权限用chmod,改所有者用chown chmod 755 "$LATEST_DIR/$TARGET_FILE" # 可选:记录日志,方便后续排查问题 echo "$(date '+%Y-%m-%d %H:%M:%S'): Successfully updated permissions for $LATEST_DIR/$TARGET_FILE" >> /var/log/fix-perms.log else echo "$(date '+%Y-%m-%d %H:%M:%S'): Warning: Target file or latest version directory not found" >> /var/log/fix-perms.log fi
第二步:给脚本加执行权限
在终端里跑这个命令,让脚本能执行:
chmod +x /path/to/fix-perms.sh
(记得把/path/to/换成你实际存放脚本的路径)
第三步:配置Cron定时执行
现在把这个脚本加到Cron里,让它自动运行。输入crontab -e打开定时任务编辑器,添加一行:
# 每天凌晨2点执行一次,你可以根据更新频率调整时间 0 2 * * * /path/to/fix-perms.sh
如果工具更新频率很高,比如每天好几次,也可以改成每小时执行:0 * * * * /path/to/fix-perms.sh
一些小提醒
- 确保运行Cron的用户(默认是当前用户)有足够的权限去修改目标文件的权限,不然脚本会执行失败
- 日志文件
/var/log/fix-perms.log如果不存在,手动创建一个:touch /var/log/fix-perms.log,并给对应用户写入权限 - 如果版本号不是以
v开头(比如直接是1.1.0),把脚本里的"$BASE_DIR"/v*改成"$BASE_DIR"/[0-9]*就行
这个方案我之前帮同事处理过类似的第三方工具权限问题,亲测好用——毕竟咱们没法改工具的目录结构,只能靠脚本自动定位啦!
备注:内容来源于stack exchange,提问作者poiromaniax
相关产品推荐
相关产品推荐

