이 쉘 스크립트가 cron 작업으로 실패하는 이유는 무엇입니까?

이 쉘 스크립트가 cron 작업으로 실패하는 이유는 무엇입니까?

쉘 스크립트에 다음이 있습니다. 이 스크립트를 실행하면 작동하지만 cron 작업으로 실행하면 작동하지 않습니다(아무 일도 일어나지 않습니다!). 어떻게요?

스크립트

#!/bin/bash

file="/home/nalangi/backup.zip"
if [ -f "$file" ]
then
   zip -9 -r backupTEMP.zip wso2am-1.7.1;
   rm -r backup.zip;
   mv backupTEMP.zip backup.zip;

else
   zip -9 -r backup.zip wso2am-1.7.1;
fi

크론탭 항목

22 14 19 10 0 /home/nalangi/script123.sh

고쳐 쓰다

문제는 스크립트에 대한 권한이 올바르게 설정되지 않은 것으로 나타났습니다.

답변1

cron 스크립트에는 최소한 두 가지 오류가 있습니다. 첫째, set -e오류가 발생하면 스크립트가 즉시 종료되도록 시작 부분에서 수행해야 합니다. 또한 상대 경로 이름을 사용하고 있으므로 cd원하는 작업 디렉터리에 대해 다음을 수행해야 합니다.

cd /home/nalangi

노트.cron(8) 매뉴얼 페이지는 다음과 같이 말합니다:

명령이 실행되면 모든 출력이 crontab 소유자(또는 crontab의 MAILTO 환경 변수가 있는 경우 해당 사용자)에게 메일로 전송됩니다.

따라서 오류가 발생하면 오류 메시지가 포함된 이메일을 받게 됩니다.

답변2

나는 이것을 다음과 같이 구현할 것이다:

#!/usr/bin/python

import os, shutil, subprocess

filename = "backup.zip"
home = "/home/nalangi"
tempfile = "backupTEMP.zip"

if os.path.exists(os.path.join(home, filename)):
  subprocess.call(["zip", "-9", "-r", tempfile, "wso2am-1.7.1"])
  os.remove(os.path.join(home, filename)
  shutil.move(os.path.join(home, tempfile), os.path.join(home, filename))
else:
  subprocess.call(["zip", "-9", "-r", filename, "wso2am-1.7.1"])

관련 정보