计划是从webapp中使用的各种文件生成WAR文件,以便更容易备份和恢复。我使用crontab和每周运行的shell脚本。该脚本首先使用jar -cvf生成WAR文件到新位置,然后rsync发生在NAS上。这就像它大致的样子:
now=$(date +%Y%m%d)
jar -cvf /rsyncsource/$now.war /opt/webappfolder
rsync -rsvp --log-file=log.txt /rsyncsource/ /nas/
我尝试运行脚本并按预期工作:创建WAR文件和rsync到NAS。但是,当我将脚本添加到crontab以实现自动化时,不会生成任何WAR文件,只会发生rsync。
有人会照顾新手吗?谢谢!
答案 0 :(得分:0)
失败可能有很多原因。
cron守护程序的环境变量与登录shell不同。
特别是用于定位命令的 PATH 变量可能不是您期望的变量:例如,在这种情况下找不到 jar 命令。
您能否提供cron守护程序运行脚本时生成的所有错误和输出?
首先,将 set -x 添加到脚本中,以使bash生成跟踪消息:
$ cat /home/william/bin/script.sh
#!/bin/bash --
set -x
now=$(date +%Y%m%d)
jar -cvf /rsyncsource/$now.war /opt/webappfolder
rsync -rsvp --log-file=log.txt /rsyncsource/ /nas/
默认情况下,错误输出和标准输出都被收集并发送到当前用户邮箱的电子邮件中。 所有登录在Linux和UNIX上都有自己的本地邮箱。 以拥有crontab的用户身份进行连接,然后输入 mail :
$ crontab -l
* * * * * /home/william/bin/script.sh
$ mail
邮件命令提供文本界面,可让您列出和阅读收到的电子邮件。 有帮助。
编辑crontab并将输出重定向到磁盘上的文件
$ crontab -l
* * * * * /home/william/bin/script.sh 2>/tmp/script.out >&2
等待cron守护程序运行脚本并使用登录到/tmp/script.out文件的信息进行调试。