为什么这个 Shell 脚本作为 cron 作业失败

为什么这个 Shell 脚本作为 cron 作业失败

我在 shell 脚本中有以下内容,当我运行这个脚本时,它可以工作,但是当我将其作为 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

crontab 条目

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

更新

事实证明,问题是脚本上的权限设置不正确。

答案1

您的 cron 脚本中至少有两个错误:首先,您应该set -e在开头执行 a ,以便任何错误都会立即结束脚本。此外,由于您使用的是相对路径名,因此您应该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"])

相关内容