このスクリプトが手動で実行されるときと同じように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問題は、設定でrootユーザーがパスワードなしでユーザーに切り替えることを許可していないようですdoas

nopassファイルのオプションを使用してこれを行うことができますdoas.conf

permit nopass root

doasrootユーザーが他のユーザーの変更を使用するのを防ぐことは意味がありませんので、対応する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

また、出力ファイル名を変数に割り当てました。これは、毎回それを参照する必要がないことを意味しますwhoamihostname

各コマンドの条件付き実行を削除し、代わりにスクリプトが一時ディレクトリをクリーンアップし続けるように選択しました。

関連情報