Comandos consecutivos no crontab

1

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 ***.

    
por Pit 01.03.2016 / 10:40

1 resposta

2
  • por que o perl e não o bash?
  • Usando bash e doublequotes.

    #/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"
    

    Salve e execute este script no cron.

por Rinzwind 01.03.2016 / 10:54