【问题标题】:Why does these sudo commands fail? [duplicate]为什么这些 sudo 命令会失败? [复制]
【发布时间】:2013-12-03 08:35:24
【问题描述】:

我想以普通用户的身份从脚本中添加一个 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

【问题讨论】:

    标签: linux bash


    【解决方案1】:

    因为你在跑步

    sudo echo .......
    

    作为 "su" 然后将结果写入 /etc/crontab :

    >> /etc/crontab
    

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

    【讨论】:

    • 你会如何解决这个问题?
    • "sudo crontab -e" 是首选方法
    • @hek2mgl pipe 后的命令仍然没有作为 su 执行
    • @SandraSchlichting 或者调用一个新的shell sudo bash -c "echo \"hello\" >> file"
    • @user000001 成功了!谢谢。
    【解决方案2】:

    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"

    【讨论】:

    • 我认为问题是“为什么这些 sudo 命令会失败?” ,而这个答案是针对“如何使用 sudo 在 crontab 中添加一行?”的问题。或“如何在 sudo 中运行 shell 命令”
    • @kappa "echo ' 15 9 * * * root /opt/script.sh' >> /etc/crontab 可以替换为任何其他 shell 命令。
    • sudo sh -c 可以替换成 sudo -s。
    猜你喜欢
    • 2021-09-13
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    相关资源
    最近更新 更多