linuxtelnet启动后台运行

linuxtelnet启动后台运行,第1张

vi /etc/xinetd.d/telnet 在disable=yes前加#,即#disable=yes

二、要启动telnet 服务就必须重新启动xinetd [root@localhost root]#service xinetd restart

三、关闭防火墙,等。。

四、要域名访问的话,要开启路由器的 23 端口映射

五、关闭的话就是 设置成 disable=yes ,然后重启xinetd service xinetd restart 1。基础知识 linux提供服务是由运行在后台的守护程序(daemon)来执行的。 守护进程的工作就是打开1个端口(port),等待(listen)进入的连接。在C/S模式中,如果客户提请了1个连接,守护进程就创建(fork)子进程来响应这个连接,而父进程继续监听其他服务的请求。 但是,对于系统所提供的每1个服务,如果都必须运行1个监听某个端口连接发生的守护程序,那么通常意味着系统资源的浪费。为此,引入“扩展的网络守护进程服务程序”xinetd(xinetd internet daemon)。telnet服务也是由xinetd守护的。 2。检测telnet、telnet-server的rpm包是否安装 OS:RedHat9 [root@localhost root]#rpm -qa telnet telnet-0.17-25 //telnet*.rpm是默认安装的// [root@localhost root]#rpm -qa telnet-server 空 //telnet*.rpm是默认没有安装的// 3。安装telnet-server 第3张盘上有telnet-server-0.17-25.i386.rpm [root@localhost root]#rpm -ivh telnet-server*.i386.rpm 4。修改telnet服务配置文件 vi /etc/xinetd.d/telnet service telnet { disable = yes flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID } 将disable=yes行前加#,或者改为disable=no PS: 安装telnet-server后,系统才有文件/usr/sbin/in.telnetd 5。重新启动xinetd守护进程 由于telnet服务也是由xinetd守护的,所以安装完telnet-server,要启动telnet服务就必须重新启动xinetd [root@localhost root]#service xinetd restart 或 [root@localhost root]#/etc/init.d/xinetd restart 6。关闭系统的防火墙 linux系统默认的防火墙是“high” 命令行界面CLI: [root@localhost root]# setup 选择:“firewall configuration” 选择:security level——“no firewall” 7。测试 telnet IP QUOTE: Red Hat Linux release 9 (Shrike) Kernel 2.4.20-8 on an i686 login: 出现,就OK了! 8。telnet默认开机启动 1)。命令ntsysv 找到telnet,用空格键激活(*)服务 2)。命令chkconfig chkconfig --add telnet chkconfig telnet on 3)。图形用户界面GUI redhat-conhat-config-services 或 “主菜单”——“系统设置”——“服务器设置”——“服务” 4)默认下,telnet不允许root登录.通过编辑/etc/pam.d/login文件,放开root用户登录权限控制 # vi /etc/pam.d/login 在auth required /lib/security/pam_securetty.so行前加“#”号注释,注销该行。 PS: 由于telnet登陆时是明文传送密码,所以不安全,建议使用ssh(secure shell)替代! windows下一般用F-Secure SSH ,putty SSH ------------------------------------------- 四、设置telnet端口 #vi /etc/services 进入编辑模式后查找telnet(???怎样查找) 会找到如下内容: telnet 23/tcp telnet 23/udp 将23修改成未使用的端口号(如:2000),退出vi,重启telnet服务,telnet默认端口号就被修改了。 五、Telnet服务限制 如果原本的默认值你并不满意,那么你可以修改成比较安全一点的机制。假设你这个 Linux 是一部主机,而且他有两块网络接口,分别是对外的 192.168.0.1 与对内的210.45.160.17 这两个,如果你想要让对内的接口限制较松,而对外的限制较严格,你可以这样的来设定: #vi /etc/xinetd.d/telnet # 先针对对内的较为松散的限制来设定: service telnet { disable = no <==预设就是激活 telnet 服务 bind = 210.45.160.17 <==只允许经由这个适配卡的封包进来 only_from = 210.45.160.0/24 <==只允许 210.45.160.0/24 这个网段的主机联机进来使用 telnet 的服务 ..... } # 再针对外部的联机来进行限制 service telnet { disable = no<==预设就是激活 telnet 服务 bind = 192.168.0.1<==只允许经由这个适配卡的封包进来 only_from = 192.168.0.0/16<==只允许 192.168.0.0 ~ 192.168.255.255 这个网段联机进来使用 telnet 的服务 only_from = .edu.cn<==重复设定,只有教育网才能联机! no_access = 192.168.25.{10,26}<==不许这些 PC 登入 access_times = 1:00-9:00 20:00-23:59 <==每天只有这两个时段开放服务 ...... }

六、Telnet root用户的登入 root 不能直接以 telnet 连接上主机。 telnet 不是很安全,默认的情况之下就是无法允许 root 以 telnet 登入 Linux 主机的 。若要允许root用户登入,可用下列方法 [root @test /root]# vi /etc/pam.d/login #auth required pam_securetty.so #将这一行加上注释! 或 # mv /etc/securetty /etc/securetty.bak 这样一来, root 将可以直接进入 Linux 主机。不过,建议不要这样做。还可以在普通用户进入后,切换到root用户,拥有root的权限! 安全的ssh SSH是一个用来替代TELNET、Rlogin以及Rsh的传统的远程登陆程序的工具,主要是想解决口令在网上明文传输的问题。为了系统安全和用户自身的权益,推广SSH是必要的。SSH有两个不兼容的版本1.x,2.x!RedHat Linux 9将默认的远程管理服务设置成OpenSSH(一个ssh的替代产品)。不需要重新安装软件包! 一、配置openssh服务器 1、ssh的配置文件是/etc/ssh/ssh_config,一般不要修改! 2、启动服务器! #ntsysv =>确认将sshd前面的勾已打上! 3、手工启动OpenSSH: #service sshd start #service sshd restart(重新启动) 4、停止服务器: #service sshd stop 二、使用OpenSSH客户端 Redhat linux 9默认已安装了OpenSSH的客户端,客户端和服务器连接时,可以使用两种验证方式:基于口令的验证方式和

背景 :工作需要,需要远程控制主机使其断开Xshell后也能一直运行。

关键字 :& ,nohup,脚本挂起。

在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用 &在程序结尾来让程序自动运行。

键入Ctrl + C,发出SIGINT信号,程序会继续运行

方法一、输入命令:jobs

方法二:输入命令:ps

fg、bg、jobs、&、nohup、ctrl+z、ctrl+c 命令

加在一个命令的最后,可以把这个命令放到后台执行,如

可以将一个正在前台执行的命令放到后台,并且处于暂停状态。

查看当前有多少在后台运行的命令

jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。

将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号)将选中的命令调出。

将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。

法子1:通过jobs命令查看job号(假设为num),然后执行kill %num

法子2:通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid

前台进程的终止:Ctrl+c

如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。

关闭中断后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)

如上所示:

nohup 和 & 组合了后台运行程序。

可以输出到 out.log保存程序输出,也可以输出到/dev/null 即空设备,不保存输出。

上面三种方式无论在nohup.out 或test.out都看不到数据结果,这是因为python执行有缓存输出

解决

新的接口接入查看程序

使用&后台运行程序:

结果会输出到终端

使用Ctrl + C发送SIGINT信号, 程序免疫

关闭session发送SIGHUP信号, 程序关闭

使用nohup运行程序:

结果默认会输出到nohup.out

使用Ctrl + C发送SIGINT信号, 程序关闭

关闭session发送SIGHUP信号, 程序免疫

平日线上经常使用nohup和&配合来启动程序:

同时免疫SIGINT和SIGHUP信号

同时,还有一个最佳实践:

不要将信息输出到终端标准输出,标准错误输出,而要用日志组件将信息记录到日志里

nohup和&究竟有啥区别

你得查看后台存在的进程 #jobs

#fg

#bg

两个命令是调入前台和后台的命令

在命令后面加上一个 &

比如:

rm -rf /tmp/ &

Linux 技巧:让进程在后台可靠运行的几种方法

WeiboGoogle+用电子邮件发送本页面

我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题。

nohup/setsid/&

场景:

如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢?

hangup 名称的来由

在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯。当用户 logout 时,modem 就会挂断(hang up)电话。 同理,当 modem 断开连接时,就会给终端发送 hangup 信号来通知其关闭所有子进程。

解决方法:

我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。

1. nohup

nohup 无疑是我们首先想到的办法。顾名思义,nohup 的用途就是让提交的命令忽略 hangup 信号。让我们先来看一下 nohup 的帮助信息:

NOHUP(1)                        User Commands                        NOHUP(1) NAME       nohup - run a command immune to hangups, with output to a non-tty SYNOPSIS       nohup COMMAND [ARG]...       nohup OPTION DESCRIPTION       Run COMMAND, ignoring hangup signals.        --help display this help and exit        --version              output version information and exit

可见,nohup 的使用是十分方便的,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上"&"来将命令同时放入后台运行,也可用">filename 2>&1"来更改缺省的重定向文件名。

[root@pvcent107 ~]# nohup ping www.ibm.com &[1] 3059nohup: appending output to `nohup.out'[root@pvcent107 ~]# ps -ef |grep 3059root      3059   984  0 21:06 pts/3    00:00:00 ping www.ibm.comroot      3067   984  0 21:06 pts/3    00:00:00 grep 3059[root@pvcent107 ~]#

2。setsid

nohup 无疑能通过忽略 HUP 信号来使我们的进程避免中途被中断,但如果我们换个角度思考,如果我们的进程不属于接受 HUP 信号的终端的子进程,那么自然也就不会受到 HUP 信号的影响了。setsid 就能帮助我们做到这一点。让我们先来看一下 setsid 的帮助信息:

SETSID(8)                 Linux Programmer’s Manual                 SETSID(8) NAME       setsid - run a program in a new session SYNOPSIS       setsid program [ arg ... ] DESCRIPTION       setsid runs a program in a new session.

可见 setsid 的使用也是非常方便的,也只需在要处理的命令前加上 setsid 即可。

[root@pvcent107 ~]# setsid ping www.ibm.com[root@pvcent107 ~]# ps -ef |grep www.ibm.comroot     31094     1  0 07:28 ?        00:00:00 ping www.ibm.comroot     31102 29217  0 07:29 pts/4    00:00:00 grep www.ibm.com[root@pvcent107 ~]#

值得注意的是,上例中我们的进程 ID(PID)为31094,而它的父 ID(PPID)为1(即为 init 进程 ID),并不是当前终端的进程 ID。请将此例与nohup 例中的父 ID 做比较。

3。&

这里还有一个关于 subshell 的小技巧。我们知道,将一个或多个命名包含在“()”中就能让这些命令在子 shell 中运行中,从而扩展出很多有趣的功能,我们现在要讨论的就是其中之一。

当我们将"&"也放入“()”内之后,我们就会发现所提交的作业并不在作业列表中,也就是说,是无法通过jobs来查看的。让我们来看看为什么这样就能躲过 HUP 信号的影响吧。

[root@pvcent107 ~]# (ping www.ibm.com &)[root@pvcent107 ~]# ps -ef |grep www.ibm.comroot     16270     1  0 14:13 pts/4    00:00:00 ping www.ibm.comroot     16278 15362  0 14:13 pts/4    00:00:00 grep www.ibm.com[root@pvcent107 ~]#

从上例中可以看出,新提交的进程的父 ID(PPID)为1(init 进程的 PID),并不是当前终端的进程 ID。因此并不属于当前终端的子进程,从而也就不会受到当前终端的 HUP 信号的影响了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7209169.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存