クローン操作が機能しない

クローン操作が機能しない

Dockerコンテナを実行しているNASでバックアップスクリプトを開発しています。私のコンテナ内で/ etc / crontabを使用してcronを実行します。

root@backups-nas:/code# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

0 * * * * root /code/backup.sh

また、私のタスクが表示される/var/log/syslogでログを見つけることができるようにsyslog-ngをインストールしました。

root@backups-nas:/code# tail -f /var/log/syslog 
==> /var/log/syslog <==
Mar 24 19:00:01 backups-nas CRON[9250]: (root) CMD (/code/backup.sh)

私のスクリプトの内容は次のとおりです。

root@backups-nas:/code# cat backup.sh
#!/bin/bash
python3 /code/backup.py all >> /code/log/$(date +\%d-\%m-\%Y).log

ただし、夜は /code/log/$(date +\%d-\%m-\%Y).log に新しいログライターがなく、操作は完了しません。 /etc/crontab 行を手動で実行しようとすると機能します。

何が起こったと思いますか?事前にありがとう

編集する:

私は次のようにbackup.pyを編集しました。

#!/usr/local/bin/python3

from sys import argv
import datetime

スクリプトを直接実行すると機能しますが、/var/log/syslog.txtの行にもかかわらずcronは実行されません。

ベストアンサー1

システムcrontabファイルの変数値PATH/sbin:/bin:/usr/sbin:/usr/bin。これは実際にいいえインタプリタパスを含めますpython3あなたは言うに横たわっている/usr/local/bin/python3

これは、次のいずれかを行う必要があることを意味します。

  • に追加してください。 Pythonバックアップスクリプトを呼び出す前にこの行を変更して、crontabファイルでこれを実行する/usr/local/bin(システムcrontabファイルのすべての操作に影響を与える)を使用するスクリプトでこれを実行できます。PATHPATH=backup.shPATH=$PATH:/usr/local/bin
  • Pythonスクリプトを呼び出すときは、次のように明示的なパスでPythonインタプリタを使用してください。

    /usr/local/bin/python3 /code/backup.py all >> "/code/log/$(date +%d-%m-%Y).log"
    

    %ここの文字はエスケープする必要はありません。)

  • 明示的なインタプリタをまったく指定せず、スクリプトの -line#!に指定されたインタプリタを使用します。/code/backup.py

    /code/backup.py all >> "/code/log/$(date +%d-%m-%Y).log"
    

    これはスクリプトの最初の行であり、スクリプトが実行可能()にbackup.py依存#!/usr/local/bin/python3しますchmod +x /code/backup.py

これらのバリエーションの中で、「最高」(個人的な意見)が最後です。

おすすめ記事