Friday, February 17, 2012

Does xp_cmdshell kill commands?

Is there some sort of timeout code in xp_cmdshell to kill commands?
I have certain commands executing through xp_cmdshell that get killed after
exactly 2 minutes. It's not every command, just certain commands.
Here is one example using rsh, although I've reproduce it with other
programs.
If I open a command prompt and type:
rsh servername sleep 180
This executes the command "sleep 180" on servername, where servername is
running a remote shell daemon. The rsh command sits there for 3 minutes and
then ends.
But if I open Query Analyzer and type:
exec master.dbo.xp_cmdshell 'rsh servername sleep 180'
the rsh command ends in exactly 2 minutes with a "connection reset" error.
It's not a problem with the rsh command - I've tried the native Windows rsh
command, the rsh command from Cygwin, and a third party rsh command - all do
the same thing - they get killed after exactly 2 minutes when run through
xp_cmdshell, and run for the full 3 minutes from a command prompt. And it's
not a problem with the remote shell server - I've tried it against AIX,
Linux, VMS, and a Windows system running a Windows rshd. And I can
reproduce it with some other programs - I just used rsh as an example
because it is on every Windows system.
But it's not every program - I wrote a "sleep" command in C, which simply
calls Sleep(180000), which will sleep for 3 minutes, and xp_cmdshell does
not kill it.
Any ideas?
JJ,
I have never heard of xp_cmdshell killing a command. (Have I been asleep
and missed this?) There are server and connection settings, of course, such
as setting the "remote query timeout" server option, the "query timeout"
connection option, and so forth.
I would suggest that there is an interaction with one of these settings that
affects you. Then why does your code work? Perhaps the C Sleep command is
implemented with some activity, while the rsh command is truly silent.
FWIW - Russell Fields
"JJ" <jjj@.nospam.com> wrote in message
news:ec5tseDYEHA.3112@.tk2msftngp13.phx.gbl...
> Is there some sort of timeout code in xp_cmdshell to kill commands?
> I have certain commands executing through xp_cmdshell that get killed
after
> exactly 2 minutes. It's not every command, just certain commands.
> Here is one example using rsh, although I've reproduce it with other
> programs.
> If I open a command prompt and type:
> rsh servername sleep 180
> This executes the command "sleep 180" on servername, where servername is
> running a remote shell daemon. The rsh command sits there for 3 minutes
and
> then ends.
> But if I open Query Analyzer and type:
> exec master.dbo.xp_cmdshell 'rsh servername sleep 180'
> the rsh command ends in exactly 2 minutes with a "connection reset" error.
> It's not a problem with the rsh command - I've tried the native Windows
rsh
> command, the rsh command from Cygwin, and a third party rsh command - all
do
> the same thing - they get killed after exactly 2 minutes when run through
> xp_cmdshell, and run for the full 3 minutes from a command prompt. And
it's
> not a problem with the remote shell server - I've tried it against AIX,
> Linux, VMS, and a Windows system running a Windows rshd. And I can
> reproduce it with some other programs - I just used rsh as an example
> because it is on every Windows system.
> But it's not every program - I wrote a "sleep" command in C, which simply
> calls Sleep(180000), which will sleep for 3 minutes, and xp_cmdshell does
> not kill it.
> Any ideas?
>
|||I'm at a loss to explain it too. "remote query timeout" is set at the
default of 600 (ten minutes) and "query timeout" is set at the default
of -1.
It was first reported to me by an end user of one of my programs. I then
was able to reproduce it here and even at home.
When run "normally" (from a command prompt or batch file) it worked
perfectly.
When my program is run from xp_cmdshell, after exactly two minutes, a call
to the Winsock API call recv() aborts with an error 10054 (connection
reset). I thought it was my program, until I was able to reproduce it with
other things, including the native Windows rsh command and Cygwin's rsh
command.
But it's not a hard timeout - some things run to completion and others do
not. But it is odd that when they die, they stop after exactly 2 minutes.
"Russell Fields" <RussellFields@.NoMailPlease.Com> wrote in message
news:%23FoPxEEYEHA.716@.TK2MSFTNGP11.phx.gbl...
> JJ,
> I have never heard of xp_cmdshell killing a command. (Have I been asleep
> and missed this?) There are server and connection settings, of course,
such
> as setting the "remote query timeout" server option, the "query timeout"
> connection option, and so forth.
> I would suggest that there is an interaction with one of these settings
that
> affects you. Then why does your code work? Perhaps the C Sleep command
is[vbcol=seagreen]
> implemented with some activity, while the rsh command is truly silent.
> FWIW - Russell Fields
> "JJ" <jjj@.nospam.com> wrote in message
> news:ec5tseDYEHA.3112@.tk2msftngp13.phx.gbl...
> after
> and
error.[vbcol=seagreen]
> rsh
all[vbcol=seagreen]
> do
through[vbcol=seagreen]
> it's
simply[vbcol=seagreen]
does
>

No comments:

Post a Comment