相关疑难解决方法(0)

使用SSH在远程服务器上启动后台进程,然后退出会话

我正在使用SSH在远程服务器上启动后台进程.这就是我现在所拥有的:

ssh remote_user@server.com"nohup process&"

这是有效的,因为这个过程确实开始了.但是在我点击Ctr-C之前,SSH会话本身并没有结束.

当我点击Ctr-C时,远程进程继续在后台运行.

我想将ssh命令放在我可以在本地运行的脚本中,所以我希望ssh会话在远程进程启动后自动退出.

有没有办法让这种情况发生?

linux ssh remote-server nohup

34
推荐指数
3
解决办法
5万
查看次数

什么是bash中的</ dev/null?

在bash中,标准(1)和错误(2)输出可以重新路由并丢弃:

>/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

但是下面的例子做了不同的事情:

nohup myscript.sh >myscript.log 2>&1 </dev/null &
Run Code Online (Sandbox Code Playgroud)

上例中的含义/功能是</dev/null什么?在什么样的脚本方案中它会有用吗?

(示例来源)

bash

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

如果分配了伪tty,为什么在ssh上运行后台任务会失败?

在ssh上运行命令时,我最近遇到了一些奇怪的行为.我有兴趣听到下面这种行为的任何解释.

正在运行ssh localhost 'touch foobar &'创建一个名为expect的文件foobar:

[bob@server ~]$ ssh localhost 'touch foobar &'
[bob@server ~]$ ls foobar
foobar
Run Code Online (Sandbox Code Playgroud)

但是,运行相同的命令但使用-t强制伪tty分配选项无法创建foobar:

[bob@server ~]$ ssh -t localhost 'touch foobar &'
Connection to localhost closed.
[bob@server ~]$ echo $?
0
[bob@server ~]$ ls foobar
ls: cannot access foobar: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我目前的理论是,由于触摸过程正在被覆盖,因此伪进程在进程有机会运行之前被分配和未分配.当然,添加一秒睡眠可让触摸按预期运行:

[bob@pidora ~]$ ssh -t localhost 'touch foobar & sleep 1'
Connection to localhost closed.
[bob@pidora ~]$ ls foobar
foobar
Run Code Online (Sandbox Code Playgroud)

如果有人有明确的解释,我会非常有兴趣听到它.谢谢.

ssh bash jobs tty pty

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

你如何在shell脚本中使用ssh?

当我尝试在shell脚本中使用ssh命令时,命令就在那里.你有一个如何在shell脚本中使用ssh的例子吗?

ssh bash shell ksh rsh

15
推荐指数
2
解决办法
3万
查看次数

如何保持持久的PHP脚本运行?

我有一个PHP脚本,用于侦听传入的套接字请求等.我需要在服务器上继续运行此脚本(它在无限循环内运行).

如何启动和管理此流程?我尝试通过SSH/putty启动它,但是一旦SSH连接超时,脚本就会死掉.

php sockets apache daemon

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

通过包含nohup的ssh启动远程脚本

我想通过ssh远程启动脚本,如下所示:

ssh user@remote.org -t 'cd my/dir && ./myscript data my@email.com'
Run Code Online (Sandbox Code Playgroud)

该脚本执行各种工作正常,直到与nohup行:

nohup time ./myprog $1 >my.log && mutt -a ${1%.*}/`basename $1` -a ${1%.*}/`basename ${1%.*}`.plt $2 < my.log 2>&1 &
Run Code Online (Sandbox Code Playgroud)

它应该启动程序myprog,将其输出传递给mylog并发送一封电子邮件,其中包含myprog创建的一些数据文件作为附件,日志作为正文.虽然当脚本到达此行时,ssh输出:

与remote.org的连接已关闭.

这里有什么问题?

谢谢你的帮助

ssh bash nohup mutt

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

如何在 ash shell 中保持程序在后台运行

我需要通过 SSH 连接到嵌入式设备,启动后台程序,然后断开连接并保持后台进程运行。问题是嵌入式设备正在使用 ash shell(不是 bash 或其他任何东西),所以 nohup 和 screen 不可用。我还没有找到任何方法来断开 ash 中的进程。有没有办法在灰烬中做到这一点?

linux ssh shell embedded-linux ash

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

远程运行时perl fork无法正常工作(通过ssh)

我有一个perl脚本,script.pl,当运行时,它执行一个fork,父进程将其pid输出到一个文件,然后在子进程输出某些东西到STOUT然后进入while循环时退出.

$pid = fork();

if ( ! defined $pid ) 
{
    die "Failed to fork.";
}
#Parent process
elsif($pid)
{
    if(!open (PID, ">>running_PIDs"))
    {
        warn "Error opening file to append PID";
    }
    print PID "$pid  \n";
    close PID;
}
#child process
else
{
    print "Output started";

    while($loopControl)     
    {
           #Do some stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在本地调用它时,这工作正常,即:perl script.pl.

该脚本打印出一些东西,然后将控制权返回给shell.(当子进程在后台进入循环时).

但是,当我通过ssh调用它时,控件永远不会返回到shell(也不会打印出"Output started"行).

ie:$ ssh username@example.com'perl script.pl'

然而,有趣的是,子进程确实运行(当我输入ps时我可以看到它).

任何人都可以解释发生了什么?

编辑:

我在调试下运行它得到了这个:

###分叉,但不知道如何创建新的TTY.

由于两个调试器争用相同的TTY,输入严重纠缠.

我知道如何仅在xterms和OS/2控制台中将输出切换到不同的窗口.对于手动切换,将创建的TTY的名称放在$ DB :: fork_TTY中,或者定义一个返回此功能的DB :: get_fork_TTY()函数.

在类UNIX系统上,可以通过键入tty获取给定窗口的TTY名称,并通过sleep 1000000将shell与TTY断开连接.

unix ssh perl fork

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

在 ec2 上远程运行命令

我有 Ubuntu 14.04 ec2 实例,我的脚本上传到那里。当我想使用我的 mac 终端远程运行脚本时,我会ssh myaws "python MyFolder/myscript.py"完美运行。但是,即使在我关闭 mac 上的终端窗口或关闭我的 mac 后,我也希望脚本在 ec2 上运行。一旦我弄清楚了,我将继续使用 cron 来安排我的脚本在 ec2 上运行,而我从来没有 ssh-ing。是否有可能,如果可能,我将如何去做?如果您需要更多说明,请告诉我。谢谢。

ssh terminal amazon-ec2 amazon-web-services ubuntu-14.04

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

关闭ssh连接后在后台通过java执行bash脚本

我正在使用 java 在远程 linux 机器上执行一个简单的 bash 脚本。

名为“shortoracle.bash”的 bash 脚本有这个脚本:

#!/bin/sh
runsql() {
   i="$1"
   end=$((SECONDS+360))
   SECONDS=0
   while (( SECONDS < end )); do
   echo "INSERT into table_$i (col1) values (CURRENT_TIMESTAMP);" | sqlplus username/password
   sleep 1
   done
}


for i in $(seq 1 10); do
 echo "DROP TABLE table_$i;" | sqlplus username/password
 echo "CREATE TABLE table_$i (col1 TIMESTAMP WITH TIME ZONE);" | sqlplus username/password
 runsql $i &
done
wait
Run Code Online (Sandbox Code Playgroud)

简单来说:创建 10 个并行连接,执行 360 秒的查询。

从我的 Java 程序中,我执行以下命令:

sshconnection.execute("nohup su - oracle …
Run Code Online (Sandbox Code Playgroud)

java linux parallel-processing ssh bash

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

R Shiny 应用程序的子背景 Julia 进程在应用程序关闭后不会保持活动状态

我需要从一个闪亮的应用程序生成一个独立的后台 Julia 进程,该进程在应用程序关闭后仍然存在。

如果 Julia 进程被称为内联: sys::exec_background('nohup', c("julia", "-e sleep(3000)", "&") 一旦 Shiny 应用程序关闭,子进程将继续存在。

但是,如果在脚本上调用 Julia 进程,并且sleep(3000)内部有相同的调用: sys::exec_background('nohup', c("julia", "test.jl", "&") 一旦 Shiny 应用程序关闭,Julia 进程也会因错误而被终止:

signal (2): Interrupt: 2
in expression starting at .../test.jl:1

kevent at /usr/lib/system/libsystem_kernel.dylib (unknown line)
unknown function (ip: 0x0)
Allocations: 2650 (Pool: 2641; Big: 9); GC: 0
Run Code Online (Sandbox Code Playgroud)

知道为什么以及如何让 Julia 脚本进程在父应用程序中存活的解决方案吗?

这是重现该行为的代码。https://gist.github.com/bakaburg1/5d1b5135fb3b4db1a3ca2eb7e8639aa5 只需运行 Shiny 应用程序,然后将其关闭。只有内联代码 Julia 进程才能幸存。

r process parent-child julia shiny

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

放在后台时,ssh客户端(路由器上的dropbear)没有输出

我正在尝试使用Linux机器上的bash脚本在远程Linux机器上自动执行某些操作并且有一个工作命令(大括号是来自cmd连接的残余):

(ssh -i /path/to/private_key user@remoteHost 'sh -c "echo 1; echo 2; echo 3; uname -a"')

但是如果一个&符连接在后台执行它,它似乎执行,但是没有输出打印,既不在stdout上,也不在stderr上,甚至重定向到文件(在大括号内)都不起作用......:

(ssh -i /path/to/private_key user@remoteHost 'sh -c "echo 1; echo 2; echo 3; uname -a"') &

顺便说一句,我ssh在Linux 2.4.37.10(在WRT54G上构建TomatoUSB)上的BusyBox v1.17.4中运行客户端dropbear v0.52.

有没有办法获得输出?这种行为的原因是什么?

编辑:

为方便起见,这里是普通的ssh帮助输出(在我的TomatoUSB上):

Dropbear client v0.52
Usage: ssh [options] [user@]host[/port][,[user@]host/port],...] [command]
Options are:
-p <remoteport>
-l <username>
-t    Allocate a pty
-T    Don't allocate a pty
-N    Don't run a remote command
-f    Run in background after auth
-y    Always accept …
Run Code Online (Sandbox Code Playgroud)

ssh busybox

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