スクリプトは実行時に機能します。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-M4
root
/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
(doas
rootユーザーが他のユーザーの変更を使用するのを防ぐことは意味がありませんので、対応する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
各コマンドの条件付き実行を削除し、代わりにスクリプトが一時ディレクトリをクリーンアップし続けるように選択しました。