Não é possível usar o utilitário "at"

5

Eu uso o Ubuntu 16.04 e tento executar diretamente no Bash:

sudo cat << EOF | at 'now + 1 minute'
echo "hello"
EOF

Eu recebo:

warning: commands will be executed using /bin/sh job 6 
at Wed Dec 28 03:01:00 2016
Can't signal atd (permission denied)

Então, dado que não há permissão para executar o comando, a frase hello não será ecoada no Bash.

Se eu usar sudo , por que a permissão seria negada? Ao contrário de cd , que não é um utilitário, mas um comando shell interno, at (assim como cat ) são utilitários, portanto, sudo deve aplicá-los.

Você pode saber por que não pode ser usado?

    
por JohnDoea 28.12.2016 / 02:10

1 resposta

10

TL; DR: mova sudo pelo canal ( | ) para o comando at .

Você realmente não está executando at como root.

Você executou cat como raiz ( sudo cat ... ) e canalizou a saída de cat para at , mas não executou o comando at como raiz.

Em muitos sistemas, alguns usuários não-root têm permissão para executar em tarefas. No entanto, se não for o que você deseja, seu sistema é configurado da maneira desejada e você pretende executar esse trabalho específico como root, então você pode resolver o problema executando at como root em vez de cat . (De qualquer forma, você não precisa executar cat como root nesta situação.)

Para isso, coloque sudo antes de at em vez de cat :

cat << EOF | sudo at 'now + 1 minute'

Detalhes opcionais:

Atualmente você tem:

sudo cat << EOF | at 'now + 1 minute'
echo "hello"
EOF

Isso executa cat como root com sudo , passando echo "hello" para ele (com a sintaxe here-document). A saída padrão do comando cat é canalizada para o comando at 'now + 1 minute' , que não é executado como root. Portanto, at tenta agendar o trabalho como o usuário não raiz que o executou (você).

Se você quiser que o trabalho em seja executado como root, corrija-o para:

cat << EOF | sudo at 'now + 1 minute'
echo "hello"
EOF

Se mais tarde você configurar uma conta de usuário não-root que esteja usando para ser executada em jobs, então você executaria nenhum comando como root:

cat << EOF | at 'now + 1 minute'
echo "hello"
EOF
    
por Eliah Kagan 28.12.2016 / 02:30