让linux程序后台运行

最近把java web项目部署到weblogic上,一直通过windows端的F-Secure操作服务器,每次启动weblogic使用./startWebLogic.sh,但是发现退出终端后,weblogic也是自动退出,查了资料,发现Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台:

 

         /usr/local/mysql/bin/mysqld_safe --user=mysql &

 

但是我们很多程序并不象mysql一样可以做成守护进程,可能我们的程序只是普通程序而已,一般这种程序即使使用 & 结尾,如果终端关闭,那么程序也会被关闭。为了能够后台运行,我们需要使用nohup这个命令,比如我们有个start.sh需要在后台运行,并且希望在后台能够一直运行,那么就使用nohup:

nohup ./start.sh &

在shell中回车后提示:

 

        [~]$ appending output to nohup.out

        原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。

 

但是有时候在这一步会有问题,当把终端关闭后,进程会自动被关闭,察看nohup.out可以看到在关闭终端瞬间服务自动关闭

 

在当shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端(如果每次在nohup执行成功后直接点关闭程序按钮关闭终端.。所以这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown)

 

       正确启动weblogic服务

       nohup ./startWebLogic.sh &

       

在Linux中,如果要让进程在后台运行,一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中

 

       查看日志

       tail -100f nohup.out 

 

查看后台运行的进程

jobs -l

 

       退出F-secure

       exit

       

        附:nohup命令参考

 

nohup 命令

 

  用途:不挂断地运行命令。

 

  语法:nohup Command [ Arg ... ] [ & ]

 

描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示"and"的符号)到命令的尾部。

 

无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

 

退出状态:该命令返回下列出口值:

 

  126 可以查找但不能调用 Command 参数指定的命令。

 

  127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。

 

  否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

 

  nohup命令及其输出文件

 

nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( nohang up)。

 

  该命令的一般形式为:nohup command &

 

  使用nohup命令提交作业

 

如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:

 

  nohup command > myout.file 2>&1 &

 

在上面的例子中,输出被重定向到myout.file文件中。

 

使用 jobs 查看任务。

 

使用 fg %n 关闭。

 

另外有两个常用的ftp工具ncftpget和ncftpput,可以实现后台的ftp上传和下载,这样就可以利用这些命令在后台上传和下载文件了。

 

附:查看linux系统的几种方法:

  1. uname -a
  2. cat /proc/version
  3. cat /etc/issue
  4. lsb_release -a

 

       参考文章:http://www.einit.com/user1/11/archives/2006/3603.html  

                         http://www.williamlong.info/archives/482.html  

                         http://yakar.iteye.com/blog/687656

<think>首先,用户的问题是:“我想在Linux中将程序后台运行时如何隐藏其日志输出 请问Linux 后台运行程序时如何禁用或隐藏日志输出”。用户想在Linux后台运行程序时,隐藏或禁用日志输出。 根据系统级指令: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题。 - 参考站内引用,但用户提供了引用,我需要基于这些引用来回答。 用户提供的引用: - 引用[1]: 关于使用nohup运行jar程序并重定向输出到文件。 - 引用[2]: 关于nohup和screen/tmux用于后台运行。 - 引用[3]: 关于运行Python程序并输出日志文件,包括-u选项和重定向。 - 引用[4]: 关于nohup命令的一般用法。 这些引用强调了使用nohup和重定向输出到文件来后台运行程序。用户想隐藏日志输出,意思是可能不想看到任何输出,包括在终端或文件中。 要隐藏日志输出,我需要建议将输出重定向到/dev/null,而不是文件。/dev/null是一个特殊的设备文件,它会丢弃所有写入它的数据,相当于一个“黑洞”。 步骤: 1. **使用nohup和重定向**:用户可以使用nohup命令,并将标准输出和标准错误重定向到/dev/null。 - 例如:`nohup your_command > /dev/null 2>&1 &` - 解释: - `> /dev/null`:将标准输出重定向到/dev/null,丢弃输出。 - `2>&1`:将标准错误重定向到标准输出,所以错误也去/dev/null。 - `&`:在后台运行。 - `nohup`:确保命令在用户退出后继续运行。 2. **其他方法**: - 使用`&`直接在后台运行,但如果没有nohup,输出可能还在终端显示。 - 使用screen或tmux,但这些主要用于会话管理,而不是直接隐藏输出;用户仍然可以在会话中看到输出,除非重定向。 - 对于Python程序,引用[3]提到`-u`选项用于无缓冲输出,但如果不想要日志,就不需要这个。 核心是重定向输出到/dev/null。 回答结构: - 清晰、逐步解释。 - 使用中文。 - 在适当的地方添加引用标识。 - 生成相关问题。 生成相关问题: - 基于主题:Linux后台运行、输出重定向、日志管理。 - 例如: 1. 如何将Linux程序的输出重定向到文件? 2. 什么是/dev/null在Linux中的作用? 3. 如何在后台运行程序时只保存错误日志? 最终回答: - 开头直接回答问题。 - 解释方法。 - 提供示例命令。 - 引用相关部分。 - 结束相关问题。</think>### Linux 后台运行程序时禁用或隐藏日志输出的方法 在 Linux 中,后台运行程序时隐藏日志输出的核心方法是**将标准输出(stdout)和标准错误输出(stderr)重定向到 `/dev/null`**。这是一个特殊的设备文件,它会丢弃所有写入的数据,相当于一个“黑洞”,从而完全隐藏日志输出。以下是详细步骤和解释: #### 步骤 1: 使用 `nohup` 命令结合重定向 `nohup` 命令用于确保程序在用户退出终端后继续运行,同时结合重定向操作符将输出丢弃到 `/dev/null`。这是最可靠的方法。 - **基本命令格式**: ```bash nohup your_command > /dev/null 2>&1 & ``` - **解释**: - `nohup`:忽略挂断信号(SIGHUP),保证程序后台持续运行即使用户关闭终端[^1][^4]。 - `your_command`:替换为您的程序命令,例如 `java -jar YourProgram.jar` 或 `python script.py`。 - `> /dev/null`:将标准输出(stdout)重定向到 `/dev/null`,丢弃所有正常日志。 - `2>&1`:将标准错误输出(stderr)重定向到标准输出(stdout),这样错误信息也会被丢弃到 `/dev/null`。 - `&`:将命令放入后台执行。 - **示例**: - 运行一个 Java 程序: ```bash nohup java -jar YourProgram.jar > /dev/null 2>&1 & ``` - 运行一个 Python 脚本: ```bash nohup python -u script.py > /dev/null 2>&1 & ``` 注意:`-u` 选项用于禁用输出缓冲(如引用[^3]所述),但在此场景中,由于输出被丢弃,可省略 `-u` 以简化命令。 #### 步骤 2: 仅使用 `&` 和重定向(不依赖 `nohup`) 如果不需要程序在用户退出后继续运行,可以使用更简单的后台运行方式: - **命令格式**: ```bash your_command > /dev/null 2>&1 & ``` - **解释**: - `your_command > /dev/null`:直接重定向标准输出到 `/dev/null`。 - `2>&1`:合并错误输出到标准输出。 - `&`:后台运行。 - **限制**:用户退出终端时,程序可能被终止(缺少 `nohup` 的保护)[^1]。 #### 步骤 3: 验证和监控 - **检查后台进程**: - 使用 `jobs -l` 查看当前会话的后台任务。 - 或使用 `ps aux | grep your_command` 确认进程是否在运行。 - **确认无输出**: - 由于输出被重定向到 `/dev/null`,终端和日志文件都不会显示任何内容。您可以使用 `ls -l /dev/null` 验证设备文件存在。 #### 注意事项 - **为什么 `/dev/null` 有效**:它是 Linux 的虚拟设备,丢弃所有输入数据,适用于完全隐藏输出。 - **性能影响**:重定向到 `/dev/null` 不会增加额外负载,但程序本身的输出生成仍会消耗资源。 - **替代方法**:如果部分日志需要保留(如错误日志),可单独重定向错误输出到文件,例如: ```bash nohup your_command > /dev/null 2> error.log & ``` 这会隐藏正常日志,但将错误保存到 `error.log`[^3]。 通过以上方法,您可以高效地在后台运行程序并完全隐藏日志输出。引用[^1][^3][^4]强调了重定向和 `nohup` 的关键作用,但针对隐藏输出,核心是重定向到 `/dev/null`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值