sudo以脚本为中心

时间:2015-09-28 19:21:30

标签: perl sudo

我有一个以user1身份运行的Perl脚本。此脚本主要用于在RHEL上停止/启动或退回作为user2运行的进程。 现在,停止/启动正在工作,因为我正在使用user2的warpper来运行停止/启动和退回命令。

问题是,这个过程是一个通常很忙的jvm。因此,如果jvm真的很忙,停止/启动或弹跳将不会一直工作。所以我试图使用kill -9杀死processid以更快地反弹。

那么,我可以在运行为user1的Perl脚本中间对user2或root执行sudo来杀死-9进程。

我尝试使用

su - user2 -c `kill -9 pid`;
sudo -u user2 -c `kill -9 pid`;

所以我的停止/启动/退回脚本正在以user1身份运行。正在停止/启动/退回的进程以user2身份运行。 如果停止/开始/反弹超过30秒,我希望我的Perl脚本能够终止进程。

请帮忙。

1 个答案:

答案 0 :(得分:1)

如果您无法使用visudo修复sudoers文件,那么Expect模块是一个选项:

#!/usr/bin/perl

use Expect;

# Get the password when your program starts
my $pw = <>;

# ... do stuff ...

# use the password when you need it
my $exp = Expect->spawn("/usr/bin/sudo", "-k", "-u", "user2", "kill", "-9", $pid);
print("expecting the prompt\n");
$exp->expect(undef, "-re", "Password:", sub { print("prompt matched\n"); $exp->send($pw); exp_continue; });
$exp->soft_close();

但是,说真的,最好的办法是把适当的条目放在sudoers中。