linux - 需要帮助使我的程序自动化

标签 linux unix

我只是想知道我应该如何解决这个问题。我正在尝试使用这些脚本(即 java -jar snet_client.jar -mode report -id 13528 -props/int2/contact/client0.properties & )自动将报告返回到数据库。假设我有数百个带有唯一编号的命令,如脚本中所示(13528)。我需要将其放入循环中,这样我就不需要一遍又一遍地编写/复制和粘贴那数百个脚本来执行。任何建议都会有帮助。它必须在 unix 中。

最佳答案

第一个 bash 脚本将迭代文件 textfile 中的每一行,假设每个 id 值都在一行上,启动 java 进程并等待其完成,然后再启动下一个进程。

# Queueing
# This one will only start the next process when the previous one completes.
OLD_IFS=$IFS
while IFS=$'\n' read -r line_data; do
    java -jar snet_client.jar -mode report -id ${line_data} -props /int2/contact/client0.properties &
    wait;
done < /path/to/textfile
IFS=$OLD_IFS

或者,此脚本执行相同的操作,从文本文件获取 id 值,但不会等到第一个脚本完成后才开始下一个脚本。这可能会导致问题,因为 snet_client.jar 程序非常消耗资源:

# Non-queueing
# This starts and runs all the processes
OLD_IFS=$IFS
while IFS=$'\n' read -r line_data; do
    java -jar snet_client.jar -mode report -id ${line_data} -props /int2/contact/client0.properties &
done < /path/to/textfile
IFS=$OLD_IFS

在这两者上,我们在开始之前存储当前的 IFS 值,以便我们可以在进程运行后重置它,以防万一我们需要在脚本文件中稍后将其设置回来。

我尚未测试这些(因为我没有可用的依赖项),因此您可能需要针对自己的环境进行调整。

关于linux - 需要帮助使我的程序自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32768172/

相关文章:

将纪元时间字符串转换为时间

linux - grep "*"和 $mfile/* 的目的

arrays - 调用/创建数组时从 csv 指定源行

linux - 我应该将哪一个用于 hadoop 用户+系统时间或 hadoop 作业计数器中花费的总 cpu 时间的基准测试任务?

linux - 为 Unix/Linux 命令设置全局默认选项的一行 - 最佳实践

bash - 用 bash 合并两个并发程序的输出

java - 如何授予在tomcat下运行的spring应用程序在另一个用户目录上写入的权限

linux - 删除列 csv 文件,其中一些包含引号文本(包括逗号)

c - 获取文件的绝对路径

mysql - 如何检测命令输出是否正在unix管道中使用