이 스크립트가 수동으로 실행될 때처럼 crontab에서 성공하지 못하는 이유는 무엇입니까?

이 스크립트가 수동으로 실행될 때처럼 crontab에서 성공하지 못하는 이유는 무엇입니까?

스크립트는 실행될 때 작동합니다.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어떤 이유로 에 성공적으로 복사하지 못합니다 . 이유는 무엇입니까? 이 스크립트가 수동으로 실행될 때처럼 crontab에서 성공하지 못하는 이유는 무엇입니까?* * * * * /home/joanna/backup_cron_root.sh >/tmp/cronjob.log 2>&1/tmp/cron.root.joanna-ONE-AMD-M4root/home/joanna/pCloudDrive/backups

내 콘텐츠 /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

답변1

joanna문제는 구성에서 루트 사용자가 비밀번호 없이 사용자로 전환하는 것을 허용하지 않는 것 같습니다 doas.

nopass파일 의 옵션을 사용하여 이 작업을 수행 할 수 있습니다 doas.conf.

permit nopass root

( doas루트 사용자가 다른 사용자의 변경 사항을 사용하는 것을 방지하는 것은 의미가 없으므로 해당 as joanna비트를 제거했습니다.)

su대신 다음을 사용하도록 선택할 수도 있습니다 doas.

su joanna -c 'cp "$1" ~/pCloudDrive/backups/" sh "$tmpfile"

또는 루트로 파일을 복사한 다음 소유권을 변경합니다 chown.


스크립트가 약간 단순화될 수도 있습니다.

#!/bin/sh

tmpfile=/tmp/crontab.$(whoami).$(hostname)

{ crontab -l; date; } >"$tmpfile"

doas -u joanna cp "$tmpfile" ~joanna/pCloudDrive/backups/
rm -f "$tmpfile"

절대 경로 이름의 남용을 제거했습니다. 이 스크립트가 cron에서 실행되었지만 거기에서 실행 /usr/bin되지 /bin않으면 설정에 문제가 있는 것입니다.$PATH

또한 출력 파일 이름을 변수에 할당했는데, 이는 매번 이를 참조할 필요가 없음을 의미합니다 whoami.hostname

각 명령의 조건부 실행을 제거하고 대신 스크립트가 임시 디렉터리를 계속 정리하도록 선택했습니다.

관련 정보