Eu tenho este cronjob definido:
* * * * * /usr/bin/systemctl suspend
E não está funcionando. Mas eu posso executá-lo em um shell e funciona. Não entendo o que poderia não estar funcionando.
Edição
Redirecionando a saída de erro para /tmp/error
:
Failed to issue method call: Access denied
Failed to issue method call: Access denied
Minha pergunta é: Os cronjobs são executados como um usuário especial ( cron
por exemplo), o que explicaria que meu usuário pode executar o comando, mas não cron
ele próprio?
Explicação adicional:
Este é um exemplo mínimo para mostrar um problema que tenho em um script (que faz mais sentido do que o único comando fornecido aqui)
systemctl
faz parte desystemd
. Eu acho que reiniciar, desligar, suspender estão trabalhando com um usuário não rootsystemd
. De qualquer forma, está funcionando no meu sistema.Finalmente, eu uso o Arch Linux e
/bin
,/usr/sbin
,/sbin
são todos links simbólicos para/usr/bin
.
systemctl
está dentro/usr/bin
e aceitasuspend
assim? O que * nix você está usando?systemctl suspend
não funciona nas distribuições Debian ou RedHat) e está explicando que você realmente não quer fazer o que está mostrando :). Além disso, tente adicionar2> /tmp/error
algo para capturar os erros que você possa estar recebendo. Por fim, diga-nos qual usuário está executando este crontab.Respostas:
Eu realmente não posso responder como tal, mas acho que posso apontar você na direção certa. Encontrei isso na página do Arch Wiki de
systemd
:Isso me sugere as seguintes possibilidades:
Você tem outro usuário conectado. Talvez você tenha feito login através de um tty?
cron
executa seus comandos usando/bin/sh
. Por padrão , no Arch, este é um link simbólico para/bin/bash
. Isso significa quecron
está iniciando um shell bash não interativo que, em seguida, detecta que há outra sessão de usuário em execução (sua), para que ele não tenha o direito de executarsystemctl
apesar de executar como usuário.Portanto, se o seu problema é porque
cron
não é permitido executarsystemctl
porque você já está logado, você pode contornar isso jogando com o polkit, mas eu não tenho experiência lá, então não posso ajudar.fonte
w
e auptime
partir dos scripts executados pelo cron. Suas saídas indicavam que havia apenas um usuário. Então, isso significa que há algum outro problema?Uma solução fácil é usar o crontab do root em vez do seu. Edite-o com:
ao invés de:
fonte
Citando aqui :
fonte
Se você estiver usando o crontab do sistema, esquecerá o campo do usuário. Experimentar:
fonte
/etc/crontab
, esse é um crontab que você crioucron -e
como seu usuário normal?crontab -e
como usuário normal.systemctl suspend
sem o sudo.Você precisa usar o arquivo de configuração systemd
/etc/systemd/system
fonte