使用shell脚本

时间:2016-03-07 15:07:10

标签: shell jar crontab war

计划是从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。

有人会照顾新手吗?谢谢!

1 个答案:

答案 0 :(得分:0)

失败可能有很多原因。

cron守护程序的环境变量与登录shell不同。

特别是用于定位命令的 PATH 变量可能不是您期望的变量:例如,在这种情况下找不到 jar 命令。

您能否提供cron守护程序运行脚本时生成的所有错误和输出?

如何调试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/

解决方案1 ​​

默认情况下,错误输出和标准输出都被收集并发送到当前用户邮箱的电子邮件中。 所有登录在Linux和UNIX上都有自己的本地邮箱。 以拥有crontab的用户身份进行连接,然后输入 mail

$ crontab -l
* * * * * /home/william/bin/script.sh
$ mail

邮件命令提供文本界面,可让您列出和阅读收到的电子邮件。 有帮助。

解决方案2

编辑crontab并将输出重定向到磁盘上的文件

$ crontab -l
* * * * * /home/william/bin/script.sh 2>/tmp/script.out >&2

等待cron守护程序运行脚本并使用登录到/tmp/script.out文件的信息进行调试。