我是靠谱客的博主 柔弱日记本,最近开发中收集的这篇文章主要介绍使用Groovy进行Bash(shell)操作,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近,我需要创建一个Groovy脚本来删除Linux机器中的某些目录。 原因如下:

  1. 我们有一台服务器来执行预定的作业。 从一个数据库到另一个数据库的ETL之类的工作,从文件到数据库的工作,等等。服务器激活客户端,这些客户端位于我们要对其执行操作的机器中。 大多数(几乎所有)作业都是用普通脚本编写的。
  2. CI流程的一部分是将WAR部署到专用服务器中。 然后,我们有了一个脚本,该脚本除其他外还使用软链接将“ webapps”定向到新创建的目录。 该部署每小时进行一次,这将很快填满专用服务器。

因此,我需要创建一个脚本来检查正确位置中的所有目录并删除旧目录。 我决定保留最新的4个目录。 当前是脚本中的魔幻数字。 如果我想要/需要,可以将其作为输入参数。 但是我决定从简单开始。

我决定做的很简单:

  1. 在已知位置列出所有前缀为webapp_的目录
  2. 按时间,降序对它们进行排序,并在所有起始索引4上运行delete。
def numberOfDirectoriesToKeep = 4
def webappsDir = new File('/usr/local/tomcat/tomcat_aps')
def webDirectories = webappsDir.listFiles().grep(~/.*webapps_.*/)
def numberOfWeappsDirectories = webDirectories.size();

if (numberOfWeappsDirectories >= numberOfDirectoriesToKeep) {
  webDirectories.sort{it.lastModified() }.reverse()[numberOfDirectoriesToKeep..numberOfWeappsDirectories-1].each {
    logger.info("Deleteing ${it}");
    // here we'll delete the file. First try was doing a Java/groovy command of deleting directories
  }
} else {
  logger.info("Too few web directories")
}

没用 文件未删除。 碰巧代理程序以与运行tomcat的用户不同的身份运行。 该代理无权删除目录。

我的解决方案是使用sudo运行shell命令。

我在以下位置找到了参考:

  • http://www.joergm.com/2010/09/executing-shell-commands-in-groovy/

和:

  • http://groovy.codehaus.org/Executing+External+Processes+From+Groovy

长话短说,这是完整的脚本:

import org.slf4j.Logger
import com.my.ProcessingJobResult

def Logger logger = jobLogger
//ProcessingJobResult is proprietary 
def ProcessingJobResult result = jobResult

try {
	logger.info("Deleting old webapps from CI - START")
	def numberOfDirectoriesToKeep = 4 // Can be externalized to input parameter
	def webappsDir = new File('/usr/local/tomcat/tomcat_aps')
	def webDirectories = webappsDir.listFiles().grep(~/.*webapps_.*/)
	def numberOfWeappsDirectories = webDirectories.size();

	if (numberOfWeappsDirectories >= numberOfDirectoriesToKeep) {
		webDirectories.sort{it.lastModified() }.reverse()[numberOfDirectoriesToKeep..numberOfWeappsDirectories-1].each {
			logger.info("Deleteing ${it}");
			def deleteCommand = "sudo -u tomcat rm -rf " + it.toString();
			deleteCommand.execute();
		}
	} else {
		logger.info("Too few web directories")
	}
	result.status = Boolean.TRUE
	result.resultDescription = "Deleting old webapps from CI ended"
	logger.info("Deleting old webapps from CI - DONE")
} catch (Exception e) {
	logger.error(e.message, e)
	result.status = Boolean.FALSE
	result.resultError = e.message
}

return result

顺便说一句,有一个较小的索引错误,由于我们总是有更多目录,所以我决定不修复(现在)。

翻译自: https://www.javacodegeeks.com/2014/11/using-groovy-for-bash-shell-operations.html

最后

以上就是柔弱日记本为你收集整理的使用Groovy进行Bash(shell)操作的全部内容,希望文章能够帮你解决使用Groovy进行Bash(shell)操作所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部