每次运行我的食谱时都会运行以下脚本:
execute 'Change group ownership tomcat' do
command 'chown -R tomcat.admin /usr/private/tomcat'
end
如果所有权为not_if
,有人可以建议如何编写tomcat.admin
或阻止此代码执行的内容吗?
答案 0 :(得分:0)
这里没有很好的选择。为此编写代码比它可能值得更加棘手。我只是让它每次都运行,除非你真的需要解决这个问题:(这是在我的列表中修复某些点,但短版本将使用Dir#[]
或类似的获取每个文件的列表/目录条目然后使用Unix上的File.stat
接口和Windows上的类似API来检查那里的每一个东西。但是,再次让它运行并担心另一件事:)
答案 1 :(得分:0)
这不是一个好习惯。使用目录资源。如果它已存在,则定义将仅更新所有权。
directory '/usr/private/tomcat' do
owner 'tomcat'
group 'admin'
mode '0755'
action :create
end
使用execute肯定更优雅。
答案 2 :(得分:0)
通过使用 find 实用程序的-exec
标志来管理只需要更改的文件和目录的权限,这是一种简单的方法。以下内容查找不属于 tomcat 或 admin 组的所有文件,然后仅将要更改的文件列表传递给 chown < / em>命令。
execute 'chown tomcat files' do
command 'find /usr/private/tomcat \
! -user tomcat -or ! -group admin \
-exec chown tomcat:admin {} +'
end
这可能或者可能不比简单地递归地chowning整个树而不首先检查权限更快。很大程度上取决于 chmod 的实现以及特定系统上生成的文件系统I / O量,但使用 find 应该减少文件系统写入,特别是如果你'在文件系统上设置NOATIME
。