为什么这些sudo命令失败?

时间:2013-11-19 17:01:12

标签: linux bash

我想以普通用户身份从脚本中添加crontab条目,因此我使用sudo获取root权限,但无论我尝试什么都会失败。

$ sudo { crontab -u root -l; echo ' 15  9  *  *  * root /opt/script.sh'; } | crontab -u root
bash: syntax error near unexpected token `}'

$ sudo echo ' 15  9  *  *  * root /opt/script.sh' >> /etc/crontab
bash: /etc/crontab: Permission denied
$ sudo echo ok
ok

2 个答案:

答案 0 :(得分:5)

因为你正在运行

sudo echo .......

as“su”然后将结果写入/ etc / crontab:

>> /etc/crontab

所以在您写入/ etc / crontab的那一刻,你不再是“su”了

答案 1 :(得分:1)

sudo echo ' 15 9 * * * root /opt/script.sh' >> /etc/crontab中,首先运行sudo echo ' 15 9 * * * root /opt/script.sh',然后shell获取sudo命令的输出并将其附加到/etc/crontab。由于shell是以普通用户身份启动的,因此没有root权限,因此shell无法写入/etc/crontab,只有root可以修改。要解决此问题,可以以root身份启动子shell,这样可以将其附加到/etc/crontab。幸运的是,这已经实现为su -c,但由于系统使用sudo,因此必须预先设置sudo。固定命令为sudo sh -c "echo ' 15 9 * * * root /opt/script.sh' >> /etc/crontab"