Posso usar o cron ou o launchd para executar um script bash sem estar logado?

0

Gostaria de ter uma simples execução de script (independentemente de alguém estar logado ou não) semelhante a colocá-lo em /etc/cron.daily/ no Linux, mas no Mac OS X Mountain Lion 10.8.4. Se é possível, como? Tudo o que precisa fazer é copiar (e talvez bzip ) um arquivo.

    
por Lido 16.08.2013 / 17:32

2 respostas

0

Usando o cron, você pode editar o crontab do superusuário com por exemplo EDITOR=nano sudo crontab -e . Quando tentei adicionar uma linha como * * * * * say aa , o comando say foi executado mesmo depois de eu sair da janela de login.

Usando o launchd, salve uma lista de propriedades como esta, por exemplo /Library/LaunchAgents/test.plist :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>test</string>
  <key>ProgramArguments</key>
  <array>
    <string>say</string>
    <string>bb</string>
  </array>
  <key>StartInterval</key>
  <integer>10</integer>
</dict>
</plist>

Em seguida, execute sudo chown root /Library/LaunchAgents/test.plist e sudo launchctl load /Library/LaunchAgents/test.plist . O comando say agendado pelo launchd também foi executado quando eu efetuei o logout na janela de login.

    
por 16.08.2013 / 18:58
0

Cron é oficialmente obsoleto, por isso você deve usar o launchd.

Existe um tutorial na apple: link

Um bom ponto de partida para explicar onde colocar o arquivo plist

link

Um pouco mais de detalhes podem ser encontrados em

link

Duas coisas que me confundiram / confundiram:

1) Preste atenção entre a diferença entre Program and ProgramArgments

2) Se o trabalho que você deseja executar for um script, ele precisa ter o #!/bin/sh , caso contrário, o launchd não poderá iniciá-lo e você terá uma saída / código de status 78 confusa.

    
por 26.09.2017 / 11:48