crontab 中的连续命令

crontab 中的连续命令

我正在运行一个需要对不同子文件夹有特定权限的软件。因此我使用 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-sequencely-in-a-cron-jobhttps://help.ubuntu.com/community/CronHowto,因此我尝试使用 来按顺序&&执行chownchmod命令,但不知何故这根本不起作用。

* * * * * 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,我认为这是让它重新工作的最佳方法,或者我在哪里犯了错误。

注意:我可以将整个软件移出子文件夹,但随后我必须在许多工作站上手动更改链接,这将非常麻烦。

答案1

  • 为什么是 perl 而不是 bash?
  • 使用 bash 和双引号。

    #/bin/bash
    chmod -R 755 "/pathToMainFolder/sub Folder/softwareFolder"
    chown -R root:user "/pathToMainFolder/sub Folder/softwareFolder"
    chmod -R 775 "/pathToMainFolder/sub Folder/softwareFolder/subfolder"
    chown -R root:user "/pathToMainFolder/sub Folder/softwareFolder/subfolder"
    chmod -R 775 "/pathToMainFolder/sub Folder/softwareFolder/someFile"
    chown -R root:user "/pathToMainFolder/sub Folder/softwareFolder/someFile"
    chmod 775 "/pathToMainFolder/sub Folder/softwareFolder"
    

    保存并从 cron 执行此脚本。

相关内容