我想以普通用户身份从脚本中添加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
答案 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"