使用 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 文件的信息进行调试。
计划将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 文件的信息进行调试。