크론 작업이 실행 중인지 확실하지 않음

크론 작업이 실행 중인지 확실하지 않음

다음 크론 작업이 있습니다 /etc/cron.d/backup.

*/1 * * * * backupbot /home/backupbot/bin/backup-script.sh

기본적으로 매분마다 실행되기를 원합니다 backup-script.sh(그리고 사용자는백업 로봇작업을 실행해야 합니다.)

/home/backupbot/bin/backup-script.sh파일의 소유자는백업 로봇(그리고 그는 "x" 권한을 가지고 있습니다). 파일은 다음과 같습니다.

#!/bin/bash
set -e

{

BACKUP_DIR=/var/app/backups
STORAGE_ACCOUNT_URL=https://myserver/backups

BACKUP_FILE=$(ls $BACKUP_DIR -t | head -1)

if [ -z "$BACKUP_FILE" ]; then
    echo "There are no backups to synchronize"
    exit 0
fi

azcopy login --identity
azcopy copy $BACKUP_DIR/$BACKUP_FILE $STORAGE_ACCOUNT_URL/$BACKUP_FILE

} >/tmp/cron.backup-script.$$ 2>&1

일반적으로 모든 출력은 에 기록되어야 합니다 /tmp/cron.backup-script.xxxx. 이러한 파일은 생성되지 않습니다.

Cron이 작업을 인지했다는 유일한 증거는 다음 출력입니다 systemctl status cron.service.

● cron.service - Regular background program processing daemon
   Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2021-04-13 09:59:08 UTC; 6h ago
     Docs: man:cron(8)
 Main PID: 1086 (cron)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/cron.service
           └─1086 /usr/sbin/cron -f

Apr 13 16:00:01 my-vm CRON[17201]: pam_unix(cron:session): session closed for user root
Apr 13 16:00:01 my-vm CRON[17198]: pam_unix(cron:session): session closed for user root
Apr 13 16:00:01 my-vm CRON[17199]: pam_unix(cron:session): session closed for user root
Apr 13 16:01:01 my-vm CRON[17402]: pam_unix(cron:session): session opened for user root by (uid=0)
Apr 13 16:01:01 my-vm CRON[17403]: (root) CMD ([ -f /etc/krb5.keytab ] && [ \( ! -f /etc/opt/omi/creds/omi.keytab \) -o \( /etc/krb5.keytab -nt /etc/opt/omi/creds/omi.keytab \) ] &&
Apr 13 16:01:01 my-vm CRON[17401]: pam_unix(cron:session): session opened for user backupbot by (uid=0)
Apr 13 16:01:01 my-vm CRON[17404]: (backupbot) CMD (/home/backupbot/bin/backup-script.sh)
Apr 13 16:01:01 my-vm CRON[17402]: pam_unix(cron:session): session closed for user root
Apr 13 16:01:01 my-vm CRON[17401]: (CRON) info (No MTA installed, discarding output)
Apr 13 16:01:01 my-vm CRON[17401]: pam_unix(cron:session): session closed for user backupbot

세션에 대해 언급합니다.백업 로봇. 어떻게 더 자세히 조사할 수 있나요?

답변1

댓글에 따르면, 스크립트는 다음과 같습니다오직소유자가 실행 가능합니다. 즉, 읽을 수 없습니다. 이렇게 하면 소유자가 스크립트를 실행할 수 없습니다.

예:

$ chmod 500 script
$ ls -l script
-r-x------ 1 myself myself 24 Apr 14 09:21 script
$ ./script
hello
$ chmod 100 script
$ ls -l script
---x------ 1 myself myself 24 Apr 14 09:21 script
$ ./script
/bin/bash: ./script: Permission denied

스크립트 파일을 읽을 수 없으면 bash쉘 해석기(현재 사용자로 실행 중)가 이를 읽을 수 없습니다.

스크립트를 실행 가능하고 읽을 수 있게 만듭니다.


위의 것 외에도 다음을 사용하는 것도 고려할 수 있습니다.변수 확장에 대한 올바른 큰따옴표, 그리고다음의 출력을 구문 분석하지 않습니다.ls(정말 유용한 유일한 것은보고 있다).

스크립트가 수정되었습니다:

#!/bin/bash

backup_dir=/var/app/backups
storage_account_url=https://myserver/backups

{
    # Find most recently modified file in "$backup_dir".
    # Assumes that there are only files there, no subdirectories.

    set -- "$backup_dir"/*
    backup_file_path=$1
    shift

    for pathname do
        if [ "$pathname" -nt "$backup_file_path" ]; then
            backup_file_path=$pathname
        fi
    done
    
    if [ ! -e "$backup_file_path" ]; then
        echo 'There are no backups to synchronize'
        exit 1
    fi
    
    # Perform backup.

    azcopy login --identity || exit 1
    azcopy copy "$backup_file_path" "$storage_account_url/$(basename "$backup_file_path")"

} >/tmp/cron.backup-script.$$ 2>&1

답변2

cron작업은 , 또는 을 통해 at실행되거나 batch데스크탑의 동일한 런타임 환경에서 실행되지 않습니다. 변경 사항이나 기타 환경 변수 설정은 작업 PATH에 자동으로 전파되지 않습니다 cron. 예를 들어 no $DISPLAY이므로 GUI 프로그램에는 특별한 처리(읽기 man xhost)가 필요합니다.

cron환경 변수는 모든 작업에 대한 읽기 파일에서 설정할 수 있습니다 .crontabman 5 crontab

echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias각 환경의 결과를 확인하세요.

해당 줄은 기본적으로 해석되기 때문에 command구문이 그보다 간단하므로 환경을 설정한 후 필요한 프로그램을 호출하는 스크립트(실행 가능, 설치, 시작)를 호출하는 것이 좋습니다.crontab/bin/sh/bin/bashcommandbash#!/bin/bash

, 를 통해 실행되는 스크립트에서는 항상 절대 경로(루트 디렉터리에서 /시작하는 경로 )를 사용합니다.cronatbatch

관련 정보