前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Groovy进行Bash(shell)操作

使用Groovy进行Bash(shell)操作

作者头像
FunTester
发布2019-10-13 22:47:47
2K0
发布2019-10-13 22:47:47
举报
文章被收录于专栏:FunTesterFunTester

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

  1. 我们有一台服务器来执行预定的作业。从一个数据库到另一个数据库的ETL之类的工作,从文件到数据库的工作,等等。服务器激活客户端,这些客户端位于我们要对其执行操作的机器中。大多数(几乎所有)作业都是用普通脚本编写的。
  2. CI流程的一部分是将WAR部署到专用服务器中。然后,我们有了一个脚本,该脚本除其他外还使用软链接将“ webapps”定向到新创建的目录。该部署每小时进行一次,这将很快填满专用服务器。 因此,我需要创建一个脚本来检查正确位置中的所有目录并删除旧目录。我决定保留最新的4个目录。当前是脚本中的可变数字。如果我想要/需要,可以将其作为输入参数。但是我决定从简单开始。

我决定做的很简单:

在已知位置列出所有前缀为webapp的目录

按时间,降序对它们进行排序,从第四个索引开始执行删除操作。

代码语言:javascript
复制
 1def numberOfDirectoriesToKeep = 4
 2def webappsDir = new File('/usr/local/tomcat/tomcat_aps')
 3def webDirectories = webappsDir.listFiles().grep(~/.*webapps_.*/)
 4def numberOfWeappsDirectories = webDirectories.size();
 5
 6if (numberOfWeappsDirectories >= numberOfDirectoriesToKeep) {
 7  webDirectories.sort{it.lastModified() }.reverse()[numberOfDirectoriesToKeep..numberOfWeappsDirectories-1].each {
 8    logger.info("Deleteing ${it}");
 9    // here we'll delete the file. First try was doing a Java/groovy command of deleting directories
10  }
11} else {
12  logger.info("Too few web directories")
13}
14

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

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

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

代码语言:javascript
复制
 1import org.slf4j.Logger
 2import com.my.ProcessingJobResult
 3
 4def Logger logger = jobLogger
 5//ProcessingJobResult is proprietary 
 6def ProcessingJobResult result = jobResult
 7
 8try {
 9    logger.info("Deleting old webapps from CI - START")
10    def numberOfDirectoriesToKeep = 4 // Can be externalized to input parameter
11    def webappsDir = new File('/usr/local/tomcat/tomcat_aps')
12    def webDirectories = webappsDir.listFiles().grep(~/.*webapps_.*/)
13    def numberOfWeappsDirectories = webDirectories.size();
14
15    if (numberOfWeappsDirectories >= numberOfDirectoriesToKeep) {
16        webDirectories.sort{it.lastModified() }.reverse()[numberOfDirectoriesToKeep..numberOfWeappsDirectories-1].each {
17            logger.info("Deleteing ${it}");
18            def deleteCommand = "sudo -u tomcat rm -rf " + it.toString();
19            deleteCommand.execute();
20        }
21    } else {
22        logger.info("Too few web directories")
23    }
24    result.status = Boolean.TRUE
25    result.resultDescription = "Deleting old webapps from CI ended"
26    logger.info("Deleting old webapps from CI - DONE")
27} catch (Exception e) {
28    logger.error(e.message, e)
29    result.status = Boolean.FALSE
30    result.resultError = e.message
31}
32
33return result

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档