linux 远程调用命令

 Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台:

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

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

            nohup /root/start.sh &

          在shell中回车后提示:

           [~]$ appending output to nohup.out

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

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

咨询红旗Linux工程师后,他也不得其解,在我的终端上执行后,他启动的进程竟然在关闭终端后依然运行。

在第二遍给我演示时,我才发现我和他操作终端时的一个细节不同:他是在当shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端;而我是每次在nohup执行成功后直接点关闭程序按钮关闭终端.。所以这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown。

这个细节有人和我一样没注意到,所以在这儿记录一下了。


附: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就是不挂起的意思( n ohang up)。

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

  使用nohup命令提交作业

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

  nohup command > myout.file 2>&1 &

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

  使用 jobs 查看任务。

  使用 fg %n 关闭。

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

简单而有用的nohup命令在UNIX/LINUX中,普通进程用&符号放到后台运行,如果启动该程序的控制台logout,则该进程随即终止。

  要实现守护进程,一种方法是按守护进程的规则去编程(本站有文章介绍过),比较麻烦;另一种方法是仍然用普通方法编程,然后用nohup命令启动程序:

  nohup<程序名>&

  则控制台logout后,进程仍然继续运行,起到守护进程的作用(虽然它不是严格意义上的守护进程)。

  使用nohup命令后,原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用,实现了完整的守护进程功能。

  ygwu @ 2005年04月18日 上午10:03

  For example:

  如何远程启动WebLogic服务?

  用telnet远程控制服务器,远程启动WEBLOGIC服务,启动后关闭telnet,WebLogic服务也跟着停止,这是因为使用telnet启动的进程会随着telnet进程的关闭而关闭。所以我们可以使用一些UNIX下的命令来做到不关闭。

  使用如下命令:

  nohup startWeblogic.sh&

  如果想要监控标准输出可以使用:

  tail -f nohup.out

  当在后台运行了程序的时候,可以用jobs命令来查看后台作业的状态。在有多个后台程序时,要使用来参数的fg命令将不同序号的后台作业切换到前台上运行。

  当用户启动一个进程的时候,这个进程是运行在前台,使用与相应控制终端相联系的标准输入、输出进行输入和输出。即使将进程的输入输出重定向,并将进程放在后台执行,进程仍然和当前终端设备有关系。正因为如此,在当前的登录会话结束时,控制终端设备将和登录进程相脱离,那么系统就向所有与这个终端相联系的进程发送SIGHUP的信号,通知进程线路已经挂起了,如果程序没有接管这个信号的处理,那么缺省的反应是进程结束。因此普通的程序并不能真正脱离登录会话而运行进程,为了使得在系统登录后还可以正常执行,只有使用命令nohup来启动相应程序。

  使用命令nohup当然可以启动这样的程序,但nohup启动的程序在进程执行完毕就退出,而常见的一些服务进程通常永久的运行在后台,不向屏幕输出结果。在Unix中这些永久的后台进程称为守护进程(daemon)。守护进程通常从系统启动时自动开始执行,系统关闭时才停止。

  在守护进程中,最重要的一个是超级守护进程inetd,这个进程接管了大部分网络服务,但并不是对每个服务都自己进行处理,而是依据连接请求,启动不同的服务程序与客户机打交道。inetd支持网络服务种类在它的设置文件/etc/inet.conf中定义。inet.conf文件中的每一行就对应一个端口地址,当inetd接受到连接这个端口的连接请求时,就启动相应的进程进行处理。使用inetd的好处是系统不必启动很多守护进程,从而节约了系统资源,然而使用inetd启动守护进程相应反应会迟缓一些,不适合用于被密集访问的服务进程

### Linux 远程调用命令工具 SSH 命令示例 在 Linux 系统中,SSH 是一种常用的远程调用命令的工具。通过 SSH,用户可以在本地计算机上执行远程服务器上的命令或脚本。以下是 SSH 的基本命令格式和一些常见的使用示例: #### SSH 基本命令格式 ```bash ssh [-选项] [user@]hostname [command] ``` - `-选项`:可选参数,用于指定连接行为。 - `user@`:远程主机的用户名。 - `hostname`:远程主机的 IP 地址或域名。 - `[command]`:需要在远程主机上执行的命令。 #### 示例 1:简单登录到远程主机 以下命令将登录到远程主机 `192.168.1.100`,并以用户 `root` 的身份进行操作: ```bash ssh root@192.168.1.100 ``` 如果未指定端口,默认使用 22 端口[^5]。 #### 示例 2:指定端口登录到远程主机 若远程主机的 SSH 服务运行在非标准端口(如 3600),可以通过 `-p` 参数指定端口号: ```bash ssh -p 3600 root@192.168.1.100 ``` #### 示例 3:远程执行单个命令 可以直接在命令行中执行远程主机上的命令,而无需登录到远程主机。例如,查看远程主机的系统时间: ```bash ssh root@192.168.1.100 "date" ``` #### 示例 4:远程执行多行命令 可以将多个命令组合在一起,并通过 SSH 在远程主机上执行。例如,查看系统时间并列出当前目录下的文件: ```bash ssh root@192.168.1.100 "date; ls -l" ``` #### 示例 5:后台运行 SSH 命令 如果需要在后台运行 SSH 命令,可以结合 `-f` 和 `-n` 参数。例如,创建一个后台任务来持续监控远程主机的 CPU 使用率: ```bash ssh -f -n root@192.168.1.100 "top -b -n 1 > /tmp/cpu_usage.log" ``` 这里 `-f` 参数使 SSH 在后台运行,而 `-n` 参数防止 SSH 读取标准输入[^3]。 #### 示例 6:分配伪终端执行命令 某些命令需要伪终端支持(如交互式程序)。可以使用 `-t` 参数为远程命令分配一个伪终端。例如,启动一个交互式 Shell: ```bash ssh -t root@192.168.1.100 "/bin/bash" ``` #### 示例 7:使用公钥认证免密码登录 为了提高安全性并简化登录流程,可以配置基于公钥的认证。首先生成密钥对: ```bash ssh-keygen -t rsa ``` 然后将公钥复制到远程主机: ```bash ssh-copy-id root@192.168.1.100 ``` 之后即可通过 SSH 免密码登录远程主机[^3]。 #### 示例 8:SSH 代理转发 如果需要通过中间服务器访问目标服务器,可以使用 SSH 代理转发功能。例如,从本地通过 `server1` 访问 `server2`: ```bash ssh -A user@server1 ssh user@server2 ``` 这里的 `-A` 参数启用代理转发功能[^4]。 --- ### 注意事项 1. 如果需要在远程主机上设置环境变量后再执行命令,可以使用 `env` 或 `export` 命令。例如: ```bash ssh root@192.168.1.100 "export MY_VAR=123; echo \$MY_VAR" ``` 2. 对于复杂的任务,建议将命令写入脚本并在远程主机上执行脚本文件。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值