此脚本在执行时有效doas ./backup_cron_root.sh
#!/usr/bin/bash
/usr/bin/crontab -l> "/tmp/cron.$(whoami).$(hostname)" && /bin/date>>"/tmp/cron.$(whoami).$(hostname)" &&
/usr/bin/doas -u joanna /usr/bin/cp -f "/tmp/cron.$(whoami).$(hostname)" "/home/joanna/pCloudDrive/backups" &&
/usr/bin/rm "/tmp/cron.$(whoami).$(hostname)"
./backup_cron_root.sh
脚本的名称在哪里。当同一个脚本被安排为 cronjob 时
doas crontab -e
,* * * * * /home/joanna/backup_cron_root.sh >/tmp/cronjob.log 2>&1
它创建了/tmp/cron.root.joanna-ONE-AMD-M4
它所拥有的root
但由于某种原因它没有成功地将它复制到/home/joanna/pCloudDrive/backups
. 为什么这样?为什么这个脚本不像手动运行时那样从 crontab 成功?
我的内容/etc/doas.conf
是
permit joanna as root
permit root as joanna
以下是我的尾巴grep CRON /var/log/syslog
:
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747796]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747797]: (root) CMD (/home/joanna/backup_cron_root.sh)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747792]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747791]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747794]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747793]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:17:22 joanna-ONE-AMD-M4 CRON[747795]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751555]: (root) CMD (/home/joanna/backup_cron_root.sh)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751551]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751550]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751553]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751552]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:22 joanna-ONE-AMD-M4 CRON[751554]: (CRON) info (No MTA installed, discarding output)
的内容/tmp/cronjob.log
是
doas: Authentication failed
问题似乎是您不允许 root 用户
joanna
在您的配置中切换到没有密码的用户doas
。nopass
您可以使用文件中的选项执行此操作doas.conf
:doas
(阻止 root 用户使用更改为其他用户没有什么意义,所以我删除了这个as joanna
位。)您还可以选择使用
su
代替doas
:或者,以 root 身份复制文件,然后更改其所有权
chown
。您的脚本也可能会有所简化:
我已经删除了对绝对路径名的过度使用。如果
/usr/bin
和/bin
不在$PATH
从 cron 执行此脚本时,那么您的设置中有问题。我还将输出文件名分配给一个变量,这意味着我们不必每次都执行
whoami
并需要引用它。hostname
我已经删除了每个命令的条件执行,而是选择让脚本继续清理临时目录。