Estou executando um software que precisa de direitos específicos para diferentes subpastas. Por isso, estou usando o crontab para atualizar esses direitos permanentemente.
Em um servidor estou usando um script perl que agrupa todos os comandos e que é executado por um crontab.
entrada crontab:
* * * * * root /root/Permissions.sh /dev/null 2&1
Permissions.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");
Isso funciona bem, mas em outro servidor, o software está localizado em uma subpasta cujo nome inclui um espaço
/pathToMainFolder/sub Folder/softwareFolder
Eu não sei como escrever o Permissions.sh para incluir este espaço, como com e sem escapar do espaço, o script parece não funcionar.
Nem:
system ("chmod -R 755 /pathToMainFolder/sub Folder/softwareFolder");
nem:
system ("chmod -R 755 /pathToMainFolder/sub\ Folder/softwareFolder");
parece funcionar.
Eu então tentei simplesmente copiar os 7 comandos diretamente no 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
Isso ajudou de alguma forma, já que agora eles são executados corretamente, mas o crontab não parece respeitar a sequência dos comandos.
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)
Como os diferentes comandos funcionam recursivamente, é crucial que eles sejam executados na ordem correta.
Eu encontrei o link e link , então tentei usar &&
para executar os comandos chown
e chmod
sequencialmente, mas de alguma forma isso não funciona .
* * * * * 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
Não recebo uma mensagem de erro, mas fazer ls -al
das pastas mostrou que os comandos não foram executados corretamente.
Existe alguma maneira de corrigir o Permissions.sh, que eu acho que seria a melhor maneira de fazer isso funcionar novamente, ou onde mais eu cometi um erro.
Nota: Eu poderia mover todo o software para fora da subpasta, mas então eu teria que alterar manualmente os links em muitas estações de trabalho, o que seria uma dor no ***.