我正在运行一个需要不同子文件夹特定权限的软件。因此,我使用 crontab 永久更新这些权利。
在一台服务器上,我使用了一个 perl 脚本,它将所有命令分组并由 crontab 执行。
crontab 条目:
* * * * * root /root/Permissions.sh /dev/null 2&1
权限.sh:
#!/usr/bin/perl
system ("chmod -R 755 /pathToMainFolder/softwareFolder");
system ("chown -R root:user /pathToMainFolder/softwareFolder");
system ("chmod -R 775 /pathToMainFolder/softwareFolder/subfolder");
system ("chown -R root:user /pathToMainFolder/softwareFolder/subfolder");
system ("chmod -R 775 /pathToMainFolder/softwareFolder/someFile");
system ("chown -R root:user /pathToMainFolder/softwareFolder/someFile");
system ("chmod 775 /pathToMainFolder/softwareFolder");
这工作正常,但在另一台服务器上,该软件位于名称包含空格的子文件夹中
/pathToMainFolder/sub Folder/softwareFolder
我不知道如何编写 Permissions.sh 以包含该空间,无论是否转义该空间,脚本似乎都不起作用。
两者都不:
system ("chmod -R 755 /pathToMainFolder/sub Folder/softwareFolder");
也不:
system ("chmod -R 755 /pathToMainFolder/sub\ Folder/softwareFolder");
似乎工作。
然后我尝试简单地将 7 个命令直接复制到 crontab 中:
* * * * * root chmod -R 755 /pathToMainFolder/sub\ Folder/softwareFolder
* * * * * root chown -R root:user /pathToMainFolder/sub\ Folder/softwareFolder
* * * * * root chmod -R 775 /pathToMainFolder/sub\ Folder/softwareFolder/subfolder
* * * * * root chown -R root:user /pathToMainFolder/sub\ Folder/softwareFolder/subfolder
* * * * * root chmod -R 775 /pathToMainFolder/sub\ Folder/softwareFolder/someFile
* * * * * root chown -R root:user /pathToMainFolder/sub\ Folder/softwareFolder/someFile
* * * * * root chmod 775 /pathToMainFolder/sub\ Folder/softwareFolder
这在某种程度上有所帮助,因为它们现在可以正确执行,但是 crontab 似乎不尊重命令的顺序。
Mar 1 10:19:01 local CRON[53069]: (root) CMD (chown -R root:user /pathToMainFolder/sub\ Folder/softwareFolder/subfolder)
Mar 1 10:19:01 local CRON[53070]: (root) CMD (chown -R root:user /pathToMainFolder/sub\ Folder/softwareFolder/someFile)
Mar 1 10:19:01 local CRON[53071]: (root) CMD (chmod -R 775 /pathToMainFolder/sub\ Folder/softwareFolder/subfolder)
Mar 1 10:19:01 local CRON[53073]: (root) CMD (chown -R root:user /pathToMainFolder/sub\ Folder/softwareFolder)
Mar 1 10:19:01 local CRON[53072]: (root) CMD (chmod -R 775 /pathToMainFolder/sub\ Folder/softwareFolder/someFile)
Mar 1 10:19:01 local CRON[53074]: (root) CMD (chmod -R 755 /pathToMainFolder/sub\ Folder/softwareFolder)
Mar 1 10:19:01 local CRON[53075]: (root) CMD (chmod 775 /pathToMainFolder/sub\ Folder/softwareFolder)
由于不同的命令以递归方式工作,因此以正确的顺序执行它们至关重要。
我找到了https://stackoverflow.com/questions/9639434/running-two-commands-sequentially-in-a-cron-job和https://help.ubuntu.com/community/CronHowto,所以我尝试&&
使用按顺序执行chown
andchmod
命令,但不知何故这根本不起作用。
* * * * * root chmod -R 755 /pathToMainFolder/sub\ Folder/softwareFolder && root chmod -R 775 /pathToMainFolder/sub\ Folder/softwareFolder/subfolder && root chmod -R 775 /pathToMainFolder/sub\ Folder/softwareFolder/someFile && root chmod 775 /pathToMainFolder/sub\ Folder/softwareFolder
* * * * * root chown -R root:user /pathToMainFolder/sub\ Folder/softwareFolder && root chown -R root:user /pathToMainFolder/sub\ Folder/softwareFolder/subfolder && root chown -R root:user /pathToMainFolder/sub\ Folder/softwareFolder/someFile
我没有收到错误消息,但是执行其中一个ls -al
文件夹显示命令未正确执行。
有什么方法可以修复 Permissions.sh,我认为这是让它再次工作的最佳方法,或者我在哪里犯了错误。
注意:我可以将整个软件移出子文件夹,但是我必须手动更改许多工作站上的链接,这对 ***.
使用 bash 和双引号。
从 cron 保存并执行此脚本。