微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

即使我注销,如何继续在后台运行unix程序?

我想在unix机器的后台运行一段时间(1)循环的Perl脚本,直到杀死它为止。

这是一个远程计算机,我没有pipe理权限(所以出于某种原因,我不能使用守护进程::通用:: While1),我通过SSHlogin到它,我希望它继续运行后我注销。

我发现的一个方法是写这样的事情:

nohup ./my_script.pl &

还有其他更好的方法吗?

`/ dev / urandom`适合模拟目的吗?

以数字顺序列出文件,而不是按字母顺序?

grep有限字符 – 一行

unix shell编程的特殊variables

按idsortingunix文件

在计算机上禁止编辑crontab(当运行背景和持久的进程不是)。

现代的Unix工具是用什么编程语言编写的?

用不同的参数重新运行以前的命令

我们如何检查string是否是版本号?

如何检查已经为VIRTUALENVWRAPPER_PYTHON = / usr / bin / python等安装了virtualenvwrapper

如何完全复制一个文件

我喜欢的方法,可以说是最简单的方法是使用screen :

screen -d -m ./myProcess

你需要关闭stdout,stderr,stdin,否则你仍然绑定到那个特定的TTY

./my_script.pl >/dev/null 2>&1 </dev/null &

这应该做的伎俩。

我相信这应该在你的Perl脚本内工作。

$SIG{ HUP } = 'IGnorE';

注意nohup的手册页文件说:

为此,nohup将SIGHUP信号(3)(“终端线挂断”)设置为忽略,然后与任何参数一起执行实用程序。

片段位于perldoc perlipc:

use POSIX 'setsid'; sub daemonize { chdir '/' or die "Can't chdir to /: $!"; open STDIN,'/dev/null' or die "Can't read /dev/null: $!"; open STDOUT,'>/dev/null' or die "Can't write to /dev/null: $!"; defined(my $pid = fork) or die "Can't fork: $!"; exit if $pid; setsid or die "Can't start a new session: $!"; open STDERR,'>&STDOUT' or die "Can't dup stdout: $!"; }

但是我不确定setsid是否可以工作,如果你不是root的话。 如果没有,请关闭标准手柄后尝试双叉。

一些链接: 如何 , 守护进程

use Proc::Daemon; Proc::Daemon::Init;

这就是我用于我的Sendmail过滤程序,可能是最简单的方法。 该模块通过CPAN可用。

在shell的后台运行这个工作是很好的,取决于你想要投入多少手工劳动,以确保它连续运行。

我会使用crontab的@reboot(也可能是定期检查)。 但是,你需要考虑到这个过程可能会多次启动。 最简单的方法是使用锁定文件。 如果文件被锁定,请退出,否则继续执行任务。 请记住使用非阻塞检查,否则你会冒着死进程的风险浪费不必要的系统资源。

如果可用,屏幕也是一个选项。

crontab +屏幕可以结合使用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐