このシェルスクリプトが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スクリプトには少なくとも2つのエラーがあります。まず、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"])

関連情報