当前位置: 首页 > 知识库问答 >
问题:

如何编写Gradle启动脚本

通鸿风
2023-03-14

我有一个Gradle应用程序,我使用./gradlew run启动它。这工作很好,但我正在尝试部署到AWS实例(Ubuntu12),我希望脚本在引导时执行。我尝试用上面的命令编写一个startup.sh文件,但没有骰子。我还尝试将该命令添加到/etc/rc.local文件中,但这似乎也不起作用。有人能给我一个关于如何在启动时执行'./gradlew run'的想法吗?谢谢!

共有1个答案

公良莫希
2023-03-14

我编写了以下init脚本,用于在redhat发行版(CentOS/Fedora等)的系统启动时启动gradle应用程序。

您需要执行几个步骤来将其全部绑定在一起:

  1. 使用gradle distzip将gradle应用程序部署到目标服务器
  2. 创建配置文件/etc/my-service.conf
  3. 将init脚本(参见下面)链接到/etc/init.d/my-service
  4. 中的服务名称

配置文件示例/etc/my-service.conf

username=someunixuser
serviceName=MyStandaloneServer
prog="/path/to/bin/MyStandaloneServer -a any -p params -y you -w want"
javaClass="some.java.MyStandaloneServer"

请在prog行中注意从distZip到应用程序的路径。

然后,您将init脚本链接到您希望它运行的实际服务,例如。

ln -s /path/to/gradle-init-start-stop /etc/init.d/my-service

完成这些操作后,就可以使用chkconfig以通常的方式添加服务(默认为3/4/5)

下面是脚本gradle-init-start-stop

#!/bin/bash
#
# chkconfig: 345 80 20
# description: Start and stop script for gradle created java application startup
#
# This is a generic file that can be used by any distribution from gradle ("gradle distZip").
# Link this file to the name of the process you want to run.
# e.g.
#   ln -s /path/to/gradle-init-start-stop /etc/init.d/ivy-jetty
#
# it requires a conf file /etc/NAME.conf, e.g. /etc/ivy-jetty.conf
# otherwise it will quit.
#
# CONFIGURATION FILE ENTRIES:
# ---------------------------
# username=process-owner
# prog="/path/to/gradle-startscript -a any -e extra parameters"
# serviceName=SomeShortNameForService
# javaClass=package.for.JavaClass

. /etc/rc.d/init.d/functions

BASENAME=$(basename $0)
maxShutdownTime=15

CONF=/etc/${BASENAME}.conf
pidfile=/var/run/$BASENAME.pid

if [ ! -f $CONF ] ; then
  echo "Could not find configuration file: $CONF"
  exit 1
fi

####### SOURCE CONFIGURATION FILE
source $CONF

checkProcessIsRunning() {
  local pid="$1"
  if [ -z "$pid" -o "$pid" == " " ]; then return 1; fi
  if [ ! -e /proc/$pid ]; then return 1; fi
  return 0
}

checkProcessIsOurService() {
  local pid="$1"
  if [ "$(ps -p $pid --no-headers -o comm)" != "java" ]; then return 1; fi
  grep -q --binary -F "$javaClass" /proc/$pid/cmdline
  if [ $? -ne 0 ]; then return 1; fi
  return 0
}

getServicePID() {
  if [ ! -f $pidfile ]; then return 1; fi
  pid="$(<$pidfile)"
  checkProcessIsRunning $pid || return 1
  checkProcessIsOurService $pid || return 1
  return 0
}

startService() {
  cmd="nohup $prog >/dev/null 2>&1 & echo \$!"
  sudo -u $username -H $SHELL -c "$cmd" > $pidfile
  sleep 0.2
  pid="$(<$pidfile)"
  if checkProcessIsRunning $pid; then
    return 0
  else
    return 1
  fi
}

start() {
  getServicePID
  if [ $? -eq 0 ]; then echo -n "$serviceName is already running"; RETVAL=0; echo ""; return 0; fi

  echo -n "Starting $serviceName: "
  startService
  if [ $? -ne 0 ] ; then
    echo "failed"
    return 1
  else
    echo "started"
    return 0
  fi
}

stopService() {
  # soft kill first...
  kill $pid || return 1

  # check if process dead, sleep 0.2s otherwise
  for ((i=0; i<maxShutdownTime*5; i++)); do
    checkProcessIsRunning $pid
    if [ $? -ne 0 ] ; then
      rm -f $pidfile
      return 0
    fi
    sleep 0.2
  done

  # hard kill now...
  kill -s KILL $pid || return 1

  # check if process dead, sleep 0.2s otherwise
  for ((i=0; i<maxShutdownTime*5; i++)); do
    checkProcessIsRunning $pid
    if [ $? -ne 0 ] ; then
      rm -f $pidfile
      return 0
    fi
    sleep 0.2
  done
  return 1
}

stop() {
  getServicePID
  if [ $? -ne 0 ]; then echo -n "$serviceName is not running"; RETVAL=0; echo ""; return 0; fi
  pid="$(<$pidfile)"

  echo -n "Stopping $serviceName "
  stopService
  if [ $? -ne 0 ]; then RETVAL=1; echo "failed"; return 1; fi
  echo "stopped PID=$pid"
  RETVAL=0
  return 0
}

restart() {
  stop
  start
}

checkServiceStatus() {
  echo -n "Checking for $serviceName:   "
  if getServicePID; then
    echo "running PID=$pid"
    RETVAL=0
  else
    echo "stopped"
    RETVAL=3
  fi
  return 0;
}


####### START OF MAIN SCRIPT

RETVAL=0
case "$1" in
  start)
    $1
    ;;
  stop)
    $1
    ;;
  restart)
    $1
    ;;
  status)
    checkServiceStatus
    ;;
  *)
    echo "Usage: $0 {start|stop|status|restart}"
    exit 1
esac
exit $RETVAL
 类似资料:
  • 本文向大家介绍Python编写memcached启动脚本代码实例,包括了Python编写memcached启动脚本代码实例的使用技巧和注意事项,需要的朋友参考一下 memcached是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但被许多网站使用。这是一套开放源代码软件,以BSD license授权发布。 memcached缺乏认证以及安全管制,这代表应

  • Gradle 是以 Groovy 语言为基础, 基于DSL (领域特定语言) 语法的自动化构建工具,但是它增加了一些额外的特性,这使得Gradle更加的容易去阐释构建. 一个构建脚本能够包含任何Groovy语言的元素 ( Any language element except for statement labels ), 每个构建脚本都使用UTF-8编码.

  • 问题内容: 例如,我有一个名为的文件。其内容是: 所以在这里我想为每个人添加图片链接 如何编写脚本以将密钥添加到每个人并添加person.name.lowercase +“ .png”作为值? 在此过程结束时,将对people.json进行编辑并将其保存到硬件中,而不是内存中。 非常感谢你。 问题答案: 这是一个完整的程序,使用JavaScript(使用node.js),可以完成所需的工作: 作为

  • 问题内容: 我在Elasticsearch索引中的文档中存储了值。 我需要对值进行一些日期操作,并返回要在过滤器中使用的布尔值。 该脚本涵盖了几行,但我无法运行它。 我编写了其他可以正常工作的脚本,但是我对Groovy的了解甚少,而对Elastic search的了解却很少。 我可以用脚本找到的每个样本只有一行,只有一行。 所以基本上我将如何采用这个完全有效的脚本 并把它变成像 我对创建一个只写一

  • 编写HTTP/1.1和HTTP/2.0脚本 有时,我们希望编写一个快速的脚本而不会遇到创建类的麻烦。addons机制具有一种速记方式,可以将模块作为一个整体视为一个addon对象。这使我们可以将事件处理程序函数放在模块作用域中。例如,下面是一个完整的脚本,它向每个请求添加标头。 def request(flow): flow.request.headers["myheader"] = "v

  • 如何从gradle运行另一个gradle脚本。我有多个gradle脚本在