使用 shell 脚本生成 WAR 文件

Generate WAR file using shell script

计划将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。

哪位新手能指教一下吗?谢谢!

失败的原因可能有很多。

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

mail 命令提供了一个文本界面,使您能够列出和阅读收到的电子邮件。 有帮助。

解决方案 2

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

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

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