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