现在是普通用户,脚本里却要用 sudo,这就得解决两个核心问题:
✅ 目标:让脚本无人值守地、定时地、自动执行带 sudo 的命令,不输密码。
⚠️ 为什么不能直接 sudo?
cron默认没有终端,不会提示你输入密码。- 所以
sudo会直接失败,任务就挂了。
解决方法:
把脚本扔进系统级目录(/etc/cron.d/),由 root 的 cron 直接调度,脚本里所有命令天然就是 root 权限,再也不用写 sudo。
下面给出最小可落地的“一条龙”操作,照着复制即可。
- 写好脚本(不要 sudo)
12345# /opt/admin/backup.sh#!/bin/bashDATE=$(date +%F)/usr/bin/tar -czf /home/web-$DATE.tar.gz /var/www
- 给脚本加可执行、仅 root 可改
123sudo chmod 700 /opt/admin/backup.shsudo chown root:root /opt/admin/backup.sh
- 放进 /etc/cron.d(推荐,时间可自定义)
新建文件/etc/cron.d/mybackup:123# 每天 03:17 以 root 身份执行17 3 * * * root /opt/admin/backup.sh >> /var/log/backup.log 2>&1
保存后立即生效,无需重启 cron。
一句话总结 :
把脚本交给 root 的 cron,脚本里所有命令就当 root 用,sudo 字样全部删掉,省心又安全。