procserv先容

打印 上一主题 下一主题

主题 844|帖子 844|积分 2532

参考地点:procserv(1) - Linux man page (die.net)

名称

procServ:带Telnet console和日志访问的历程服务程序。

简介

procServ [OPTIONS] port command args ...

描述

procServ为一条命令(例如,一个软IOC)创建一个运行时情况。它分叉出一个作为进入后台的守护运行的服务程序,这创建一个子进行,它用来自命令行全部剩下args运行命令。这个服务程序通过在指定端口提供telnet连接为子历程提供console访问(stdin/stdout)。出于安全原因,默认访问被限定于来自本地(127.0.0.1)的连接,因而必要登录到主机上一个有效账户。
可以使用-L(--logfile)选项配置procServ写子历程全部输入和输出的console日志到一个文件。发送一个信号SIGHUP到这个服务器程序将使其重新打开这个日志文件。为了便于运行在一个中央console访问管理(如conserver),-l(--logport)选项再创建一个telnet端口,它默认是公共的(例如,被受限于localhost),而且提供对这个子历程console的只读日志访问。-r(--restrict)选项限定日志端口为本地,雷同于访问端口。
访问和日志端口允很多个连接,它们被透明地处理:来自访问连接的全部输入被转发给这个子历程,来自这个子历程的全部输出被转发给全部访问和日志连接(而且被写入日志文件)。来自这个服务历程的全部诊断消息以"@@@"开头,明确地区别于来自子历程消息。为了提高可读性,一个由-n(--name)选项指定的名称将更换很多消息中的命令字符串。
当子历程终止时,服务程序默认自动再生产这个子历程。为了避免旋转,子历程重启之间最短时长必要包管(默认,15秒,可以使用-holdoff选项更改它)。使用转换命令^T,可以在线转换这种举动,使用--noautorestart选项可以更改默认。通过使用kill命令^X发送一个信号给子历程,你可以手动地重启一个正在运行地子历程。对于子历程被关闭了,服务程序接受两个命令:^R或^X重启这个子历程,和^Q退出服务程序。-w(--wait)选项选项启动在关闭模式中地服务程序,期待一个telnet连接来发送手动启动命令来创建子历程。
使用客户端的断开顺序,可以断开任何telnet连接(控制或日志)。通过发送登出命令字符,也可以断开控制连接,可以使用-x(--logoutcmd)选项指定那个字符。
要阻塞对子历程潜在伤害的输入字符(例如,作用域软IOCs的^D和^C),可以使用-i(--ignore)选项指定在来自一个console访问端口时悄悄被忽略的字符。
为了便于作为尺度系统服务被启动和停止,-p(--pidfile)选项告诉服务程序创建一个包含这个服务程序历程PID的尺度PID文件。
-d(--debug)选项在调试模式运行服务程序:这个守护历程留在前台,打印全部正常日志内容和其它调试消息到stdout。

选项

1)--allow:答应来自任何地方的控制连接。(默认:限定控制访问于localhost)。假如子历程答应,创建了一个严重安全漏洞,由于来自任何地方的telnet客户端可以连接到子历程的stdin/stdout而且执行主机上任何命令。必要在编译时被使能(见Makefile)。除非你确切地知道你为什么正在做和你正在做什么,否则请不要使能和使用这个选项。
2)--autorestartcmd=char:切换当在访问连接上发送char时自动重启标志。使用^指定控制字符,""禁用。默认^T。
3) --coresize=size:设置core文件地最大尺寸。详见getrlimit文档。设置size为0将避免子历程创建core文件。
4)-c, --chdir=dir:在启动子历程前,切换dir的目录为dir。在子历程每次启动时,做这件事,确保在子历程重启时符号链接被剖析。
5) -d, --debug:进入调试模式。调试模式将保持服务历程在前台,而且使能诊断消息将被发送给控制终端。
6) -e, --exec=file:为子历程以可执行文件运行file。默认时command。
7) -f, --foreground:保持服务历程在前台而且连接到控制终端。
8) -h, --help:打印帮助消息。
9) --holdoff=n:在子历程重启实验之际爱你期待至少n秒。默认是15秒。
10) -i, --ignore=chars:忽略访问连接上再chars中全部字符。这可以用于子历程屏蔽来自潜在伤害的输入字符,例如,关闭软IOC的^D和^C。使用^指定控制字符,^^指定单个^字符。
11) -k, --killcmd=char:当在一个访问连接上发送char时,杀死这个子历程(默认自动重启子历程)。使用^指定一个控制字符,""用于没有杀死命令。默认是^X。
12) --killsig=signal:当接受到这个kill命令时,使用signal杀死子历程。默认是9(SIGKILL)。
13) -l, --logport=port:在port上提供对子历程console的只读访问。默认,全部主机可以连接port,使用-r(--restrict)选项限定访问于localhost。
14) -L, --logfile=file:写一个全部输入和输出的console日志到file。
15) --logstamp[=fmt]:在日志中带时间戳的前缀行,设置时间戳格式字符串为fmt。默认是"[<timefmt>]"。(见--timefmt)选项。)
16) -n, --name=tile:在全部服务程序消息中,使用title替换完整命令行来增长可读性。
17) --noautorestart:退出时不要自动重启子历程。
18) -p, --pidfile=file:写服务历程的PID到file以便于集成到通例的系统服务管理机制中。
19)--timefmt=fmt:设置用于打印时间戳的格式字符串为fmt。默认是"%c"。(详见strftime)。
20) -q, --quiet:不要写信息输出(服务程序)。当作为系统脚本的一部分运行时,避免弄乱屏幕。
21) --restrict:限定日志连接于localhost。
22) -V, --version:打印程序版本。
23) -w , --wait:不要立即立即启动子历程。而是,期待telnet连接和手动启动命令。
24) -x, --logoutcmd=char:当在访问连接上发送char时,登出(关闭客户端连接)。使用哦个^指定控制字符。莫瑞诺是空。

用法

要使用procServ启动一个软IOC,更换到IOC的启动目录。一个代表性命令行是:
  1. procServ -n "My SoftIOC" -i ^D^C 20000 ./st.cmd
复制代码
要连接这个IOC,登录到这个软IOC的主机而且使用以下连接端口20000:
  1. telnet localhost 20000
复制代码
要从一个远程机器连接,ssh到procserhost上一个用户账号而且连接到端口20000:
  1. ssh -t user@procservhost telnet localhost 20000
复制代码
 你将连接到这个软IOCs console而且接收到一条信息欢迎消息。来自procServ服务器的全部输出将以"@@@"开头,使得能够区分来自你IOC发送的消息。
  1. > telnet localhost 20000
  2. Trying 127.0.0.1...
  3. Connected to localhost.
  4. Escape character is '^]'.
  5. @@@ Welcome to the procServ process server (procServ Version 2.1.0)
  6. @@@ Use ^X to kill the child, auto restart is ON, use ^T to toggle auto restart
  7. @@@ procServ server PID: 21413
  8. @@@ Startup directory: /projects/ctl/lange/epics/ioc/test314/iocBoot/iocexample
  9. @@@ Child "My SoftIOC" started as: ./st.cmd
  10. @@@ Child "My SoftIOC" PID: 21414
  11. @@@ procServ server started at: Fri Apr 25 16:43:00 2008
  12. @@@ Child "My SoftIOC" started at: Fri Apr 25 16:43:00 2008
  13. @@@ 0 user(s) and 0 logger(s) connected (plus you)
复制代码
输入杀死命令字符^X来重启这个软IOC,而且获取有关这个操纵的服务程序消息。
输入telnet转义字符^]退回到一个telnet提示符,接着"quit"退出telnet(和ssh,当你正在远程连接时)。
虽然procServ原来是为了成为一个运行软IOCs的情况,但任何历程可以作为子历程被启动。它为必要访问其console的任何程序提供情况,在后台作为一个守护运行,而且通过写一个文件或者通过console访问和日志工具(诸如conserver)维护一个日志。

情况变量

PROCSERV_PID:设置写服务历程的PID所到的文件名。(见-p选项)。
PROCSERV_DEBUG:假如设置,procServ以调试模式启动(见-d选项)。

示例

在Ubuntu 22.04上,安装所需软件包:
  1. apt-get install asciidoc
  2. apt-get install libtelnet-dev
  3. apt-get install telnet
  4. apt-get install procserv
复制代码
 创建一个简单的IOC应用程序,来进行测试:
数据库文件如下:
  1. root@orangepi5:/usr/local/EPICS/program/softIoc# cat db/simpledb.vdb
  2. record(waveform, "$(USER):wfin") {
  3.   field(DESC, "A Example Waveform")
  4.   field(SCAN, "Passive")
  5.   field(NELM, "10")
  6.   field(FTVL, "LONG")
  7. }
  8. record(stringin, "$(USER):StrIn") {
  9.   field(DESC, "A Example StringIn")
  10.   field(SCAN, "Passive")
  11.   field(VAL, "HelloWorld")
  12.   field(PINI, "YES")
  13. }
复制代码
启动文件脚本如下:
  1. #!../../bin/linux-aarch64/softIoc
  2. #- You may have to change softIoc to something else
  3. #- everywhere it appears in this file
  4. < envPaths
  5. cd "${TOP}"
  6. ## Register all support components
  7. dbLoadDatabase "dbd/softIoc.dbd"
  8. softIoc_registerRecordDeviceDriver pdbbase
  9. ## Load record instances
  10. dbLoadRecords("db/simpledb.vdb","USER=TEST")
  11. cd "${TOP}/iocBoot/${IOC}"
  12. iocInit
复制代码
进入IOC的启动目录softIoc/iocBoot/iocsoftIoc执行以下命令:
  1. root@orangepi5:/usr/local/EPICS/program/softIoc/iocBoot/iocsoftIoc#  procServ -n "My SoftIOC" -i ^D^C 20000 ./st.cmd
  2. procServ: spawning daemon process: 147476
  3. Warning: No log file and no port for log connections specified.
复制代码
用本地telnet客户端进行连接:
  1. root@orangepi5:/usr/local/EPICS/program/softIoc/iocBoot/iocsoftIoc# telnet localhost 20000
  2. Trying ::1...
  3. Trying 127.0.0.1...
  4. Connected to localhost.
  5. Escape character is '^]'.
  6. @@@ Welcome to procServ (procServ Process Server 2.7.0)
  7. @@@ Use ^X to kill the child, auto restart is ON, use ^T to toggle auto restart
  8. @@@ procServ server PID: 147476
  9. @@@ Server startup directory: /usr/local/EPICS/program/softIoc/iocBoot/iocsoftIoc
  10. @@@ Child startup directory: /usr/local/EPICS/program/softIoc/iocBoot/iocsoftIoc
  11. @@@ Child "My SoftIOC" started as: ./st.cmd
  12. @@@ Child "My SoftIOC" PID: 147477
  13. @@@ procServ server started at: Thu Jul  4 20:38:30 2024
  14. @@@ Child "My SoftIOC" started at: Thu Jul  4 20:38:30 2024
  15. @@@ 0 user(s) and 0 logger(s) connected (plus you)
复制代码
用远程主机进行访问:
  1. (base) [blctrl@localhost ~]$ ssh -t orangepi@192.168.50.184 telnet localhost 20000
  2. orangepi@192.168.50.184's password:
  3. Trying ::1...
  4. Trying 127.0.0.1...
  5. Connected to localhost.
  6. Escape character is '^]'.
  7. @@@ Welcome to procServ (procServ Process Server 2.7.0)
  8. @@@ Use ^X to kill the child, auto restart is ON, use ^T to toggle auto restart
  9. @@@ procServ server PID: 147476
  10. @@@ Server startup directory: /usr/local/EPICS/program/softIoc/iocBoot/iocsoftIoc
  11. @@@ Child startup directory: /usr/local/EPICS/program/softIoc/iocBoot/iocsoftIoc
  12. @@@ Child "My SoftIOC" started as: ./st.cmd
  13. @@@ Child "My SoftIOC" PID: 147477
  14. @@@ procServ server started at: Thu Jul  4 20:38:30 2024
  15. @@@ Child "My SoftIOC" started at: Thu Jul  4 20:38:30 2024
  16. @@@ 1 user(s) and 0 logger(s) connected (plus you)
复制代码
通道访问测试:
  1. root@orangepi5:~# caget TEST:StrIn
  2. TEST:StrIn                     HelloWorld
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

八卦阵

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表