我在 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"])