java 启动jar将日志每天输入

要使用nohup运行Java JAR文件并将输出重定向到按日期命名的日志文件,你可以使用以下命令:

nohup java -jar your_jar_file.jar > /path/to/logs/$(date +"%Y-%m")/output_$(date +"%Y-%m-%d").log 2>&1 &

这个命令做了以下几件事情:
使用nohup运行Java JAR文件,使进程在后台运行,且不会因为终端关闭而终止

/path/to/logs/(date+"(date +"%Y-%m")/output_(date+"(date +“%Y-%m-%d”).log将命令的输出重定向到指定的日志文件。/path/to/logs/是你希望存放日志的目录,(date+"(date +"%Y-%m")会根据当前的日期生成一个格式为YYYY-MM的日期字符串,并将其作为文件夹的名称。然后,output_(date+"(date +“%Y-%m-%d”)会生成一个格式为YYYY-MM-DD的日期字符串作为日志文件的名称。你需要将/path/to/logs/替换为你实际的日志目录。
2>&1将标准错误输出(2)重定向到与标准输出(1)相同的位置,也就是日志文件。
&将命令放到后台运行。
这样,日志文件将按日期存储在以月份为子目录的不同文件夹中,并且每个月份的文件夹都会根据当月的日期创建相应的日志文件。如果文件夹不存在,命令会自动创建它们。

其实这个是达不到这个上述要求的效果的,只会创建运行命令当天的文件夹

如果想要实现可以采用定时任务或者log4j配置文件去实现

<think>好的,我现在需要解决用户关于如何在使用`java -jar`启动JAR文件时传递命令行参数的问题。首先,我得回忆一下相关的知识,并结合提供的引用内容来组织答案。 用户的问题很明确,他们想知道如何传递参数,并且需要示例和语法说明。根据引用[1],`java -jar`的基本语法是`java -jar <JAR文件路径> [参数]`,所以参数应该直接跟在JAR文件路径后面。引用[4]也提到,在Java程序中,可以通过`main`方法的`args`数组来获取这些参数,例如`args[0]`是第一个参数,以此类推。 接下来,我需要确认参数传递的具体步骤。用户可能需要一个具体的例子来理解这个过程。比如,假设有一个名为`app.jar`的JAR文件,想要传递两个参数`param1`和`param2`,那么命令应该是`java -jar app.jar param1 param2`。在Java代码中,这些参数会被存储到`String[] args`数组中,可以通过索引访问。 另外,需要注意参数的类型和顺序。参数是以空格分隔的,如果参数本身包含空格,应该用引号包裹,比如`java -jar app.jar "first param" second`,这样`args[0]`就是`first param`,`args[1]`是`second`。这一点可能需要特别说明,避免用户遇到参数分割的问题。 还需要提到如何检查参数是否存在,如引用[4]中的示例,通过判断`args.length`是否大于零来确定是否有参数传入。这对于用户处理参数时的条件判断很重要。 此外,用户可能想知道如何在命令行中同时使用JVM参数和应用程序参数。这时候,JVM参数(如`-Xmx512m`)应该放在`-jar`之前,而应用程序参数放在JAR文件路径之后。例如:`java -Xmx512m -jar app.jar arg1 arg2`。这点需要明确区分,避免混淆。 最后,结合引用[3]提到的`nohup`命令,如果需要后台运行并传递参数,命令可能是`nohup java -jar BiuBiuBiu.jar arg1 arg2 >output 2>&1 &`。这也需要简要提及,以覆盖用户可能的使用场景。 总结一下,回答的结构应该是先说明基本语法,然后给出示例,接着详细解释如何访问参数,注意事项如参数中的空格处理,以及JVM参数与应用程序参数的区别,最后可能给出一个结合nohup的示例。同时,确保引用正确的来源,如引用[1]和[4],并在适当的位置添加引用标识。</think>### 通过 `java -jar` 启动时传递命令行参数的方法 #### 1. 基本语法 使用 `java -jar` 启动 JAR 文件时,命令行参数的传递格式为: ```shell java -jar <JAR文件路径> [参数1] [参数2] ... [参数N] ``` - **参数传递规则**: - 参数直接跟在 JAR 文件路径之后,以空格分隔。 - 若参数包含空格或特殊字符,需用双引号包裹,例如 `"param with space"`[^4]。 #### 2. 示例代码 **Java 程序示例**(假设 JAR 文件中的 `main` 方法如下): ```java public class Main { public static void main(String[] args) { if (args.length > 0) { System.out.println("接收到的参数:"); for (String arg : args) { System.out.println("- " + arg); } } else { System.out.println("未传递参数"); } } } ``` **命令行调用示例**: ```shell # 传递两个参数 java -jar app.jar Hello World # 输出结果: # 接收到的参数: # - Hello # - World ``` #### 3. 参数处理注意事项 - **参数顺序**:参数按传入顺序存储在 `args` 数组中,例如 `args[0]` 对应第一个参数。 - **参数类型**:所有参数均为字符串类型,需在代码中自行转换(如转为整数或布尔值)。 - **带空格的参数**: ```shell java -jar app.jar "Hello World" 2024 # args[0] = "Hello World", args[1] = "2024" ``` #### 4. 结合 JVM 参数使用 若需同时传递 **JVM 参数**(如内存配置),需将 JVM 参数放在 `-jar` 之前: ```shell java -Xmx512m -jar app.jar param1 param2 ``` #### 5. 后台运行并传递参数(结合 `nohup`) ```shell nohup java -jar app.jar param1 param2 > output.log 2>&1 & ``` 此命令会将参数 `param1` 和 `param2` 传递给程序,并将日志输出到 `output.log`[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值