【问题标题】:Execute Maven command from cron job从 cron 作业执行 Maven 命令
【发布时间】:2014-02-13 19:09:01
【问题描述】:

我使用 Selenium webdriver、Maven 和 Java 创建了一个自动化测试套件。我还创建了一个 shell 脚本来启动 web 驱动程序,然后使用 maven 命令执行测试套件。这很好用。

但是当使用 cron 作业运行相同的 shell 脚本时,不会执行 maven 命令。 我看到了一些在 shell 脚本中为 maven 指定路径的解决方案。这对我也不起作用。

#!/bin/bash

回显“/bin/sh /home/loop/bin/startSelenium.sh start

cd /home/me/projects/my_test_suite

导出 PATH=$PATH:/home/me/installs/apache-maven-3.0.4/bin

mvn clean test -DsuiteXmlFile=/src/test/resources/testng.xml -Ptest -Dgroups=group0 >> ~/bin/mvnLogGroup1.txt

我可以在这里做什么来通过 cron 作业运行 mvn 命令?

谢谢

【问题讨论】:

  • 通常在 cron 作业中,环境看起来确实与普通用户不同。我想这可能是原因。

标签: shell maven selenium cron


【解决方案1】:

我遇到了同样的问题,我通过将 mvn 调用放入 shell 脚本并从 cron 调用 shell 脚本来解决它。这种方式的好处是可以在shell脚本中设置环境变量。这是我的 shell 脚本:

#!/bin/bash 

export PATH=$PATH:/opt/mvn/bin:/usr/bin
export M2_HOME=/opt/mvn
export M2=/opt/mvn/bin
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/

/opt/mvn/bin/mvn -f /mnt/crawler/versioneye_maven_crawler/pom.xml crawl:clojars

我在 /opt/mvn 中安装了 Maven。 crontab 中的条目如下所示:

1 1 * * * /mnt/crawler/clojars.sh >> /mnt/crawler/clojars.txt

这适用于我在 Ubuntu 上。这就是我们为VersionEye 抓取clojars 的方式。希望对您也有帮助。

【讨论】:

    【解决方案2】:

    希望在脚本中使用完整路径运行 maven 可能会有所帮助。
    /home/me/installs/apache-maven-3.0.4/bin/mvn clean test -DsuiteXmlFile=/src/test/resources/testng.xml -Ptest -Dgroups=group0 >> ~/bin/mvnLogGroup1.txt

    【讨论】:

      【解决方案3】:

      来自man crontab

      cron(8) 守护程序会自动设置几个环境变量。 SHELL 设置为 /bin/sh,LOGNAME 和 HOME 设置自 crontab 所有者的 /etc/passwd 行。 HOME 和 SHELL 可能会被 crontab 中的设置覆盖; LOGNAME 可能不会。

      PATH(您使用的是$PATH)不是这些变量之一!您将需要包括 Java 之类的内容,可能还有更多内容。

      试试这个:将 PATH 设置为空白,然后从命令行运行脚本。这应该让您很好地了解您还需要在脚本中考虑哪些内容。

      【讨论】:

        最近更新 更多