小编Mat*_*att的帖子

如何判断一个字符串是否包含POSIX中的另一个字符串?

我想编写一个Unix shell脚本,如果另一个字符串中有一个字符串,它将执行各种逻辑.例如,如果我在某个文件夹中,请分支.有人可以告诉我如何做到这一点?如果可能的话,我想让这不是特定于shell的(即不仅仅是bash),但如果没有别的方法可以做到这一点.

#!/usr/bin/env sh

if [ "$PWD" contains "String1" ]
then
    echo "String1 present"
elif [ "$PWD" contains "String2" ]
then
    echo "String2 present"
else
    echo "Else"
fi
Run Code Online (Sandbox Code Playgroud)

unix shell

120
推荐指数
7
解决办法
28万
查看次数

Windows批处理相当于"fuser -k <folder>"

我有一个Unix shell脚本会杀死正在访问文件夹的任何进程:

fuser -k ..\logs\*
Run Code Online (Sandbox Code Playgroud)

是否有与此等效的Windows批处理脚本?我知道TASKKILL,但我不确定它是否能满足我的需求.有谁知道Windows shell是否可以实现这一点?

windows scripting batch-file

8
推荐指数
1
解决办法
7453
查看次数

xargs 和 Kill 不能一起杀死特定进程

我有一个运行 Red Hat 6.8 的 Docker 容器,并且有几个正在运行的 Java 进程。在具有相同操作系统的其他计算机上,我使用了类似于以下的命令来查找并终止所有 Java 进程:

ps -ef | grep 'java' | grep -v 'grep' | awk '{print $2}' | xargs kill -9
Run Code Online (Sandbox Code Playgroud)

但是,在这台机器上,它给了我以下错误:

xargs: kill: No such file or directory
Run Code Online (Sandbox Code Playgroud)

取消“| xargs Kill -9”确实有效,并向我显示了我想要杀死的进程的 PID,但由于某种原因,该命令无法同时工作。

有人知道为什么吗?

unix bash shell grep

6
推荐指数
1
解决办法
5943
查看次数

Java:跨越几个月的两个日期之间的差异

我有以下代码成功地让我在两天之间(以天,小时,分钟,秒为单位)的差异:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
Date d1 = format.parse(startTime);
Date d2 = format.parse(endTime);
long diff = d2.getTime() - d1.getTime();
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000);
System.out.println("Start: " + startTime);
System.out.println("End: " + endTime);
System.out.println(diffDays + " days, " + diffHours + " …
Run Code Online (Sandbox Code Playgroud)

java time date

4
推荐指数
1
解决办法
3200
查看次数

使用Java和JMX/MBean访问Weblogic JMS

我正在尝试编写一个Java程序,它可以浏览Weblogic JMS服务器中的所有JMS队列,并读取给定队列中的消息(但不消耗它们).我正在尝试使用Weblogic Mbeans和JMX,但对两者都是新手.我有以下代码来获取所有队列及其深度:

private void countMessages1() throws Exception {
    JMXConnector connector = getMBeanServerConnector("/jndi/"+RuntimeServiceMBean.MBEANSERVER_JNDI_NAME);
    MBeanServerConnection mbeanServerConnection = connector.getMBeanServerConnection();
    ObjectName service = new ObjectName("com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean");
    ObjectName serverRuntime = (ObjectName) mbeanServerConnection.getAttribute(service, "ServerRuntime");
    ObjectName jmsRuntime = (ObjectName) mbeanServerConnection.getAttribute(serverRuntime, "JMSRuntime");
    ObjectName[] jmsServers = (ObjectName[]) mbeanServerConnection.getAttribute(jmsRuntime, "JMSServers");
    for (ObjectName jmsServer: jmsServers) {
        if ("JMSServer".equals(jmsServer.getKeyProperty("Name"))) {
            ObjectName[] destinations = (ObjectName[]) mbeanServerConnection.getAttribute(jmsServer, "Destinations");
            for (ObjectName destination: destinations) {
                String queueName = destination.getKeyProperty("Name");
                Long queueDepth = (Long) mbeanServerConnection.getAttribute(destination, "MessagesCurrentCount");
                System.out.println("Queue: " + queueName + " Depth: " + queueDepth);
            } …
Run Code Online (Sandbox Code Playgroud)

java jmx mbeans weblogic jms

4
推荐指数
1
解决办法
3372
查看次数

Java:使用多个线程将消息发送到JMS队列

我正在尝试编写一个Java类来使用多个线程从JMS队列发送和读取消息以加快速度.我有以下代码.

    System.out.println("Sending messages");
    long startTime = System.nanoTime();

    Thread threads[] = new Thread[NumberOfThreads];
    for (int i = 0; i < threads.length; i ++) {
        threads[i] = new Thread() {
            public void run() {
                try {
                    for (int i = 0; i < NumberOfMessagesPerThread; i ++) {
                        sendMessage("Hello");
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };
        threads[i].start();
    }

    //Block until all threads are done so we can get total time
    for (Thread thread : threads) {
        thread.join();
    }

    long endTime …
Run Code Online (Sandbox Code Playgroud)

java multithreading jms

3
推荐指数
1
解决办法
3538
查看次数

使用ssh执行Unix命令列表

我想在多台机器上运行相同的Unix命令集.我知道ssh和下面的东西.我想编写一个shell脚本来执行此操作.我可以访问bash和ksh,我在Linux Red Hat 5上.

ssh root@ip "echo \$HOME"
Run Code Online (Sandbox Code Playgroud)

但是,我有两个问题:

  1. 我不断收到提示输入密码的提示.如何让它不提示我并自动输入密码?
  2. 如何执行多个命令?

unix linux shell

2
推荐指数
1
解决办法
5019
查看次数

SQL:按值1分组和"不"值1?

我有一个表格,如下所示:

OrderNo, OrderType
1, Type1
2, Type1
3, Type2
4, Type3
5, Type4
Run Code Online (Sandbox Code Playgroud)

在OrderType上执行"分组依据"很简单,但有没有办法做"分组依据"来得到类似的东西:

OrderCount, OrderType
2, Type1
3, Not Type1
Run Code Online (Sandbox Code Playgroud)

这是DB2,但理想情况下,我正在寻找一种无论数据库供应商如何都能运行的解决方案.

sql db2 database-agnostic

2
推荐指数
1
解决办法
98
查看次数

Java:在后台更新包含大量行的JTable

我正在编写一个简单的Java Swing实用程序,它将从MQ JMS服务器读取消息并将它们显示在JTable中.

private void getMessages() {
        try {
            if (null != Queue) {
                Queue.close();  //Close previous queue connection if there is one.
            }
            Queue = new MQQueue(QueueManager, tableQueues.getValueAt(tableQueues.getSelectedRow(), 1).toString(), MQConstants.MQOO_INPUT_SHARED | MQConstants.MQOO_BROWSE | MQConstants.MQOO_OUTPUT, queueManager, null, null);
            int count = 0;
            modelMessages.setRowCount(0);
            MQGetMessageOptions getOptions = new MQGetMessageOptions();
            getOptions.options = MQConstants.MQGMO_BROWSE_FIRST;
            ArrayList<Object[]> rows = new ArrayList<Object[]>();
            while(true) {
                if (count > 0) {
                    getOptions.options = MQConstants.MQGMO_BROWSE_NEXT;
                }
                MQMessage message = new MQMessage();
                try {
                    Queue.get(message, getOptions);
                    byte[] b = new …
Run Code Online (Sandbox Code Playgroud)

java swing multithreading jtable mq

2
推荐指数
2
解决办法
893
查看次数

尝试使用Java运行PL/SQL脚本

我熟悉Java JDBC并经常使用它来运行简单的SQL.但是,我想运行类似下面的内容.这比普通的SQL更多PL/SQL,因此我的问题.我不是从Oracle机箱运行它,而是从我自己的计算机运行它.有人可以帮助我使用Java运行这种PL/SQL吗?

spool C:\count.txt;
DEFINE date="TO_DATE ('08-29-2011','mm-dd-yyyy')";
SET NEWPAGE 0;
SET SPACE 0;
SET LINESIZE 500;
SET PAGESIZE 0;
SET ECHO OFF;
SET FEEDBACK OFF;
SET VERIFY OFF;
SET HEADING OFF;
SET TRIMSPOOL ON;
alter session set nls_date_format='yyyy-mm-dd hh24:mi';
select 'TABLE1', count(*) from SCHEMA.TABLE1 where modifyts < &date;
select 'TABLE2', count(*) from SCHEMA.TABLE2 where modifyts < &date;
select 'TABLE3', count(*) from SCHEMA.TABLE3 where modifyts < &date;
spool off;
Run Code Online (Sandbox Code Playgroud)

java oracle plsql jdbc

1
推荐指数
1
解决办法
2689
查看次数

Java:读取未知数量的属性

我有一个Java属性文件定义为:

Property.1=value1
Property.2=value2
...
Run Code Online (Sandbox Code Playgroud)

这里可以有任意数量的房产.

我熟悉如何阅读和使用Java属性,但是当我不知道它们的数量时,我不确定如何编写读取属性的代码.我对伪代码的想法是这样的:

// Somehow get the number of properties
for (int i=0; i<properties.size(); i++ {
   prop.getProperty("Property"+i);
...
}
Run Code Online (Sandbox Code Playgroud)

有谁知道如何阅读可变数量的属性?

java properties

1
推荐指数
1
解决办法
1299
查看次数

如何杀死Unix中经常休眠的进程?

我有一个 Unix shell 脚本,如下所示:

(
  # Trap the HUP signal so it doesn't kill me
  trap "" HUP
  # Redirect stderr to /dev/null
  exec 2>/dev/null
  # Redirect stdin from /dev/null
  exec 0</dev/null
  # Redirect stdout to logfile
  exec 1>${LOG}

  while [ 1 ]
  do
    ps -ewwo pcpu,pid,ppid,comm,time,etime,thcount,scount,fuser,args | grep -v "migration" | grep -v "watchdog" | grep -v "ksoftirqd"
    sleep 600
  done
) &
Run Code Online (Sandbox Code Playgroud)

我希望它在我运行的一些测试期间在后台运行以捕获进程信息。它运行带有一些选项的“ps”,然后休眠 10 分钟,我希望它无限期地运行(因为我的测试长度不同)。

我的问题是我没有办法阻止这个 - 执行“ps -ef”只显示“sleep 600”命令,而且我没有办法打破循环。有没有办法杀死这个脚本,或者更好地编写它,以便不包含永无止境的循环?我唯一的想法是编写脚本以在一定时间限制(即几组 10 分钟)后结束执行,但我不希望在每次测试之前都编辑脚本。

unix shell scripting

1
推荐指数
1
解决办法
6602
查看次数

从日志文件中提取Java错误堆栈

我有一个Java应用程序,当出错时,为每个错误写一个类似于下面的错误堆栈.

<Errors>
    <Error ErrorCode="Code" ErrorDescription="Description" ErrorInfo="" ErrorId="ID">
        <Attribute Name="ErrorCode" Value="Code"/>
        <Attribute Name="ErrorDescription" Value="Description"/>
        <Attribute Name="Key" Value="Key"/>
        <Attribute Name="Number" Value="Number"/>
        <Attribute Name="ErrorId" Value="ID"/>
        <Attribute Name="UserId" Value="User"/>
        <Attribute Name="ProgId" Value="Prog"/>
        <Stack>typical Java stack</Stack>
    </Error>
    <Error>
      Similar info to the above
    </Error>
</Errors>
Run Code Online (Sandbox Code Playgroud)

我编写了一个Java日志解析器来浏览日志文件并收集有关此类错误的信息,虽然它确实有效,但它速度慢且效率低,特别是对于数百兆字节的日志文件.我只是基本上使用字符串操作来检测开始/结束标记的位置并计算它们.

有没有办法(通过Unix grep,Python或Java)有效地提取错误并计算每个错误发生的次数?整个日志文件不是XML,因此我无法使用XML解析器或Xpath.我面临的另一个问题是,有时错误的结束可能会滚动到另一个文件中,因此当前文件可能没有上面的整个堆栈.

编辑1:

这是我目前所拥有的(相关部分仅用于节省空间).

//Parse files
for (File f : allFiles) {
   System.out.println("Parsing: " + f.getAbsolutePath());
   BufferedReader br = new BufferedReader(new FileReader(f));
   String line = "";
   String fullErrorStack = "";
   while ((line = br.readLine()) != null) {     
      if (line.contains("<Errors>")) …
Run Code Online (Sandbox Code Playgroud)

python java xml unix grep

1
推荐指数
1
解决办法
970
查看次数