普通账号登录云服务器,需要定时执行shell脚本,脚本里面有需要执行sudo命令,如何处理?

27 阅读1分钟

现在是普通用户,脚本里却要用 sudo,这就得解决两个核心问题:


✅ 目标:让脚本无人值守地、定时地、自动执行带 sudo 的命令,不输密码


⚠️ 为什么不能直接 sudo

  • cron 默认没有终端,不会提示你输入密码。
  • 所以 sudo 会直接失败,任务就挂了。

解决方法:

把脚本扔进系统级目录(/etc/cron.d/),由 root 的 cron 直接调度,脚本里所有命令天然就是 root 权限,再也不用写 sudo

下面给出最小可落地的“一条龙”操作,照着复制即可。


  1. 写好脚本(不要 sudo

    # /opt/admin/backup.sh
    #!/bin/bash
    DATE=$(date +%F)
    /usr/bin/tar -czf /home/web-$DATE.tar.gz /var/www
    
  2. 给脚本加可执行、仅 root 可改

    sudo chmod 700 /opt/admin/backup.sh
    sudo chown root:root /opt/admin/backup.sh
    
  3. 放进 /etc/cron.d(推荐,时间可自定义) 新建文件 /etc/cron.d/mybackup

    # 每天 03:17 以 root 身份执行
    17 3 * * * root /opt/admin/backup.sh >> /var/log/backup.log 2>&1
    

保存后立即生效,无需重启 cron


一句话总结 :

把脚本交给 root 的 cron,脚本里所有命令就当 root 用,sudo 字样全部删掉,省心又安全。