Я использую Ubuntu 16.04 и пытаюсь выполнить непосредственно на Bash:
sudo cat << EOF | at 'now + 1 minute'
echo "hello"
EOF
Я получаю:
warning: commands will be executed using /bin/sh job 6
at Wed Dec 28 03:01:00 2016
Can't signal atd (permission denied)
Итак, если нет разрешения на запуск команды, фраза hello
не будет отражено на Баше.
Если я использую sudo
, почему в разрешении будет отказано? В отличие от cd
, который является не утилитой, а встроенной командой оболочки, at
(как и cat
) являются утилитами, поэтому sudo
должны их применять.
Возможно, вы знаете, почему at нельзя использовать?
TL; DR: переместиться sudo
через канал (|
) к at
управляйте собой.
at
как корень.Вы работали cat
как корень (sudo cat ...
), и переданный по каналу вывод cat
кому: at
, но Вы не работали at
сама команда как корень.
Во многих системах некоторым некорневым пользователям разрешают работать в заданиях. Однако, если это не то, что Вы хотите, Ваша система настроена путем, Вам нравится, и Вы намереваетесь выполнить этот конкретный в задании как корень, затем можно решить проблему путем выполнения at
как базируются вместо cat
. (Так или иначе Вы не должны работать cat
как базируются в этой ситуации.)
Чтобы сделать это, поместить sudo
прежде at
вместо cat
:
cat << EOF | sudo at 'now + 1 minute'
В настоящее время Вы имеете:
sudo cat << EOF | at 'now + 1 minute'
echo "hello"
EOF
Это работает cat
как базируются с sudo
, передача echo "hello"
к нему (с синтаксисом здесь-документа). cat
стандартный вывод команды передается по каналу к команде at 'now + 1 minute'
, который не выполняется как корень. Поэтому at
попытки запланировать задание как некорневого пользователя, который выполнил его (Вы).
Если Вы хотите в задании работать как корень, можно решить эту проблему путем изменения его на:
cat << EOF | sudo at 'now + 1 minute'
echo "hello"
EOF
При позже конфигурировании некорневой учетной записи пользователя, которую Вы используете, чтобы быть разрешенными работать в заданиях, то Вы не выполнили бы никакую команду как корень:
cat << EOF | at 'now + 1 minute'
echo "hello"
EOF