草庐IT

泰克示波器TDS210更换IPS彩色屏幕

超级网吧 2024-01-06 原文

本文将介绍如何为泰克示波器TDS210更换当前流行的IPS彩色屏幕,甚至在以后准备将屏幕图像转换为HDMI输出,彻底对以往的老旧屏幕说拜拜。
文章如有侵权请联系我删除。

目录

一、缘起

1.与TDS210的相遇

  2019年,那时本人还是电子信息工程专业的大一学生,一直梦想有一台属于自己的示波器,但因为还未工作经费不那么充足,于是想要在 “海鲜市场” 淘一台二手示波器。经过网上查询对比,发现二手示波器还是泰克的相对靠谱一些,于是乎就在 “海鲜市场” 买到了一台TDS210,60MHz的频率以及1GS/s的采样频率,虽然存储深度很低,折腾乐趣大于使用,但是对于我来说还勉强足够了。

  就这样,使用了几年的时间,一直到现在。但是因为TDS210的生产时间实在是太早了,大约10年前的东西了,所以他的屏幕实在是惨不忍睹,哪怕我买的上家已经更换过一块黄底的屏幕,但是还是不可避免的老化了,而且就算没有老化,屏幕的视角也太差劲了,视角必须比示波器低才能看清显示的东西。所以我的想法是再去 “海鲜市场” 淘一个成色好的代换屏幕,就在前几天,经过一番搜索,发现了一款看起来还不错的白底黑显示替换屏幕,标价140软妹币。不过卖家实在是让人恶心的很:因为我的屏幕视角不行,只在一个方向上看不太清,所以我就想先了解下卖家的屏幕视角什么样(他的宝贝链接图片也只有一个视角方向的上机图),所以我就向卖家询问能否拍个实际的上机视频看看,视角怎么样。然后卖家就莫名其妙的直接三两句话就让人gun,事后还拉黑,逃避自己的行为后果。不知道这个卖家是什么原因做出的这种行为,可能是觉得我问的问题很傻,浪费他的宝贵时间,亦或者他遇到什么事情心情不好。本来我心想,只要他的屏幕显示效果比我的好,我就买了。结果,害。。。

  经过这个卖家的这一通行为,我也没了继续淘这种屏幕的想法。既然这种屏幕这么差劲,而且还要受个别卖家的气,我为什么不自己搞一块现在流行的IPS全视角彩屏接上去呢,甚至如果可以将信号转换为HDMI信号,以接到通用显示器上不更爽歪歪。于是乎,说干就干。先放一下当前已经实现的显示效果。实测,延迟几乎没有,与原屏幕显示的刷新效果完全乎一致,使用上完全没问题,长期运行也无异常情况出现。当前仅仅在4.3寸的480x272屏幕上显示的,接下来还会将其显示到5寸800x480的屏幕上并等比放大,然后实现背景替换,颜色更改,甚至设置一些常用主题等功能。
【已实现更好的效果,点此查看 2022/10/10】

TDS210示波器修改IPS彩屏试机效果

  当然还有很重要的价格问题,如果只是换用5寸 800x480 IPS全视角彩屏的话,屏幕加上自己设计的配套PCB板,全部价格会在100元以内。一个全新5寸 800x480 IPS全视角彩屏也就50元左右,使用的处理器也就15元,再加上其他电阻电容啥的最小系统组成器件,稳稳100元以内。

2.改装预想步骤

1.可以显示到常用的IPS全视角彩屏上(已基本完成,花费了两天时间)
2.可以将显示信号输出到HDMI上,以显示到通用显示器上(待实现,可实现机率90%,打算使用国产便宜的FPGA,已购买)
3.将TDS210的控制主板(控制板很小,巴掌大,大赞)拿出来,自己重新画一个按键板,自制新的外壳,将TDS210的体积缩小至少一倍,近似便携。(待实现,可实现机率70%)
4.改装为可以使用电池供电,或者外部独立供电的,更小的便携示波器。(待实现,可实现机率80%)
【注:实现机率为我的时间、是否继续下去的心以及其他影响,哈哈】

3.意义

  说了这么多,有人会说,你费这么多功夫,折腾这么一个实用性没有那么好的东西,有什么意义呢?所以,我觉得我认为的意义也有必要列一下:

1.首要意义就是换一款我看起来舒服的显示方案,以便我自己使用起来更舒心。
2.在这过程中会收获很多实践经验。
3.我在很多地方看到过其他电子爱好者有过IPS屏显示的需求。这个改装可以为其他电子爱好者提供一种其他的选择,这也是很有意义的一件事情。


因为时间并不是特别充裕,所以,进度会很龟速。[捂脸]😅,但是一旦有新的进度,我一定会第一时间更新。

二、我的DIY实现过程

1.查询屏幕通讯协议

  首先拆开示波器,发现了屏幕的型号为LM32P07,然后搜索LM32P07的datasheet(注意,不要使用baidu引擎,否则搜不到,推荐必应。并且要直接搜索 “LM32P07 datasheet”,才能找到。),找到手册并打开,手动将手册重要部分翻译为中文。

1.首先查看屏幕的引脚。

[屏幕控制引脚]

引脚编号符号说明电源等级
1V0LCD对比度调整电压-
2VEELCD电源(-24V)-
3D3显示数据信号高电平点亮,低电平熄灭
4D2显示数据信号高电平点亮,低电平熄灭
5D1显示数据信号高电平点亮,低电平熄灭
6D0显示数据信号高电平点亮,低电平熄灭
7NC--
8VSS信号地(0V)-
9VDD逻辑电源(+5V)-
10CP2数据输入时钟信号下降沿
11CP1输入数据锁存信号下降沿
12S扫描启动信号高电平

[屏幕灯管引脚]

引脚编号符号说明
1VFT1CCFT背光电源
2VFT2CCFT背光电源

  屏幕使用4线并口进行数据的传输,一个时钟信号、一个锁存信号以及一个扫描信号。具体每个信号是什么意思,可以在看协议时详细分析。

2.屏幕显示像素点分布

  因为屏幕是个单色屏幕,可以近似认为是单色led点阵(便于理解,以下也说是led点),所以从图上可以看出,分布非常简单,由左向右,由上向下的顺序排序,以此组成一个平面二维坐标点。每行有320个led点,共有240行。1.1就表示第一行第一列的点,这样标记后有利于后面协议的分析。

3.查看协议,分析协议,将协议搞明白。

  值得庆贺的是,这种屏幕的协议超级简单,很容易就能够看明白。根据下图可以看出,CP1来一个高脉冲,表示将要传输1行的数据,经过一点点间隔后,CP2信号开始传输。在CP2信号的下降沿处依次取D3、D2、D1、D0的数据,放置到此行的第1、2、3、4点上,以此类推。每个CP2下降沿传输4个数据,这样经过80个CP2下降沿,即可传输完4x80=320个点,即1行的显示数据。1表示点亮此处的led,0表示熄灭此处的led点。这样就知道一行的开始以及每个数据的传输,但是如何确定当前数据是哪一行呢?所有有了S信号,当传输完第1行数据后(注意是第1行),S信号会发送1个脉冲,告诉屏幕现在已经将第1行的数据保存进缓冲区了,可以进行刷新了,然后屏幕就开始从第1行数据开始显示,一次刷新1行的数据。依次刷新完一帧的数据。然后再传输第1行的数据,再来1个S信号,屏幕再次开始刷新,循环以往。这样就确定了屏幕数据的开始和每1行的开始。

4.配合处理器的通俗理解

  因为屏幕的驱动是纯数字芯片构成的,所以tds210发送给屏幕的1行数据,可以暂时锁存到屏幕的缓存器上,并且只能暂存1行的数据。然后S信号高电平来后,屏幕会不断的将缓存器上的数据,从第1行开始,发送给具体的led点进行显示,直至240行刷新完,再次等待S信号。所以CP1引脚叫做输入数据锁存信号,S叫做扫描启动信号。这也是为什么S信号会在第1行数据发送完毕后产生。

  如果使用处理器对协议进行交互的话,就可以保存所有的数据,而不是只能锁存1行的数据,这时这些引脚就又可以有一个通俗的理解:

信号意义行为
S帧开始信号高电平表示开始传输一帧的第2行
CP1行开始信号下降沿表示开始传输1行数据
CP2数据时钟信号下降沿表示传输4个数据

  这样一来,控制信号就明朗了起来,开局等待S信号下降沿表明开始新的一帧图像,等待CP1信号下降沿表示开始1行,根据CP2下降沿获取4个数据,循环以往就可稳定刷新数据。需要注意的是,S表示从第2行开始刷新,直至刷新到下一帧的第1行,这样也是完整的320x240数据。

2.根据协议选取合适的处理器以及屏幕

  使用逻辑分析仪,将S、CPP1、CPP2以及D3-D0全部接上,捕捉屏幕的控制接口协议波形。优先查看的应该是频率最快的CPP2信号,可以看到一个CPP2信号的脉宽343.75ns,周期687.5ns,频率达到了1.45MHz。如果要对这么多信号同时进行采样捕捉、根据协议解码、并且实时将数据显示到320*240的彩色屏幕上的话,使用像如STM32f1、STM32f4等常见单片机,将会非常吃力,并且带LCD控制器的型号价格又非常的昂贵。显然对于使用常见单片机完成来说,是非常愚蠢的行为。那么找到一款运行主频高,带有LCD控制器,价格低廉,并且简单易用的处理器,就是非常必要的了。

  还好,在此之前已经用过一个全志的ARM9芯片–F1C100S,但是这个芯片主要是面对主线linux的场景使用,所以程序代码就要在linux环境上编写。又还好,因为我也没学过linux,所以在此之前就研究如何当作单片机一样使用,经过各种网络搜索和学习,在其他大佬的肩膀上[非常非常感谢挖坑网上的大佬们],已经在裸机和RTOS环境实现基本常用的所有功能,完全可以当作一个单片机来使用了。并且也根据其原理图,添加用得到的外设电路,画了一块PCB板,全部器件也可以手动焊接完成,也编写了一套固件成功运行,相当于对这个芯片已经算是比较熟了。
  F1C100S,标准主频408MHz,但是可以超频,在本DIY中实际运行在720MHz。其内置了32MB的DDR1 RAM,且带有LCD-RGB控制器,甚至内部还包含I-Cachel和D-Cachel缓存,对于逻辑判断、数值运算等的运行性能可以提升非常大。最主要的还是其价格,某宝一片仅需15元左右,而且常规应用场景下,仅使用2层板即可PCB布线成功,可以说是超超超超(x100)值了。

3.编写程序,实现显示

  全部开始前的准备工作现已准备完毕,接下来就是根据协议写程序了。首先,如果程序在flash中运行,每次执行都要去flash中读取,这样会导致程序执行效率大幅下降,所以芯片开始时运行bootloader,不要在bootloader内直接编写应用代码程序,而是在bootloader内将用到的基础外设初始化,将flash中的应用代码全部读取到ram中,然后跳转到ram中的应用代码开始执行,这样程序的运行效率最高。

  进入应用程序代码后,首先要初始化MMU,开启I-Cachel和D-Cachel。将系统频率初始化到720MHz,此时AHB总线360MHz、APB总线180MHz。然后初始化LCD-RGB控制器,设置显示缓存区域,可以进行显示即可。之后就是循环的协议解析和向显示缓存发送数据,LCD-RGB控制器会自动控制显示,无需CPU干预。我将S接到GPIOE4,CPP1接到GPIOE5,CPP2接到GPIOE7,D3接到GPIOE8,D2接到GPIOE9,D1接到GPIOE10,D0接到GPIOE11。如下所示。

F1C100S引脚屏幕引脚
GPIOE4S
GPIOE5CPP1
GPIOE7CPP2
GPIOE8D3
GPIOE9D2
GPIOE10D1
GPIOE11D0

  主代码如下,对其他各平台不通用的硬件相关代码就不贴了。代码还会存在BUG、执行效率等问题,大家仅作为参考。

volatile unsigned int * PE_Dat;											//用于保存GPIOE的DAT寄存器地址
volatile unsigned int x=320;											//显示位置
//dstc1为显示缓存,为了减少运算,直接定义四个相连的地址,直接对应存放D3-D0shuju 
__align(4) unsigned short *BT1 = (unsigned short *)dstc1;				//D3存放地址
__align(4) unsigned short *BT2 = (unsigned short *)dstc1+1;				//D2存放地址
__align(4) unsigned short *BT3 = (unsigned short *)dstc1+2;				//D1存放地址
__align(4) unsigned short *BT4 = (unsigned short *)dstc1+3;				//D0存放地址

int main(void)
{ 
	sys_mmu_init();																				//MMU初始化,包含
	Sys_Clock_Init(720000000);																	//系统初始化
	Sys_LCD_Init();																				//屏幕初始化
	
	display_colour(0,0,320,240,BLACK);															//清屏
	
	GPIO_Congif(GPIOE,GPIO_Pin_4,GPIO_Mode_IN,GPIO_PuPd_DOWN);									//GPIOE.4  下拉输入模式  S
	GPIO_Congif(GPIOE,GPIO_Pin_5,GPIO_Mode_IN,GPIO_PuPd_DOWN);									//GPIOE.5  下拉输入模式  CPP1
    GPIO_Congif(GPIOE,GPIO_Pin_7,GPIO_Mode_IN,GPIO_PuPd_DOWN);									//GPIOE.7  下拉输入模式  CPP2
	GPIO_Congif(GPIOE,GPIO_Pin_8,GPIO_Mode_IN,GPIO_PuPd_DOWN);									//GPIOE.8  下拉输入模式  D3
	GPIO_Congif(GPIOE,GPIO_Pin_9,GPIO_Mode_IN,GPIO_PuPd_DOWN);									//GPIOE.9  下拉输入模式  D2
	GPIO_Congif(GPIOE,GPIO_Pin_10,GPIO_Mode_IN,GPIO_PuPd_DOWN);									//GPIOE.10 下拉输入模式  D1
	GPIO_Congif(GPIOE,GPIO_Pin_11,GPIO_Mode_IN,GPIO_PuPd_DOWN);									//GPIOE.11 下拉输入模式  D0

	PE_Dat = &(GPIOE->DAT);																		//获取GPIOE的DAT的寄存器地址
	
	while(1)
	{
											
		
		b:x=320;																				//在发送第一行数据后,帧开始信号S才会发出,则会导致第一行在上一帧的最后才能检测到
		
		while(((*PE_Dat)&0x00000010)==0);														//等待开始一帧图像
		while((*PE_Dat)&0x00000010);															//等待一帧开始信号结束
	
		while(((*PE_Dat)&0x00000010)==0)														//在一帧之内
		{
			do																					//因为帧开始信号S来的时候,行开始信号CPP1也会来,会错过行开始信号CPP1,所以直接进行一行显示
			{
				while(((*PE_Dat)&0x00000080)==0)												//CPP2为低电平,等待高电平到来
				{
					if((*PE_Dat)&0x00000020) goto a;											//如果在此期间,因为一些错误缘故导致丢失一些数据,到了刷新下一行的时间,跳转到下一行处出刷新
				}																		
				if((*PE_Dat)&0x00000100)*(BT1+x) = WHITE;										//如果D3=1,则写白色
				else *(BT1+x) = BLACK;															//如果D3=0,则写黑色
	
				if((*PE_Dat)&0x00000200)*(BT2+x) = WHITE;										//如果D2=1,则写白色
				else *(BT2+x) = BLACK;															//如果D2=0,则写黑色

				if((*PE_Dat)&0x00000400)*(BT3+x) = WHITE;										//如果D1=1,则写白色
				else *(BT3+x) = BLACK;															//如果D1=0,则写黑色

				if((*PE_Dat)&0x00000800)*(BT4+x) = WHITE;										//如果D0=1,则写白色
				else *(BT4+x) = BLACK;															//如果D0=0,则写黑色
				x+=4;																			//地址一次+4
				
				if(x>=76800)x=0;																//写完最后一行后,写第一行
				
				if(x==320)goto b;																//写完第一行后,跳转到刷新新一帧处
				
			}while(((*PE_Dat)&0x00000020)==0);													//在一行之内
			
			a:if(x%320)x = (x/320+1)*320;														//如果一行数据有错失,设置到对齐位置
			while(((*PE_Dat)&0x00000020)==0);													//等待开始一行图像
			while(((*PE_Dat)&0x00000020));														//等待开始一行图像
		}
	}
}

  因为涉及频繁的IO操作,任何一点耗时操作都会影响代码的执行效率,所以在上面代码中,尽量直接操作寄存器,使用寄存器地址处理问题,尽量少使用判断语句等。最终,终于实现了简单的同步显示效果。

  大家有需要的,可以先根据本文所述的代码和协议,移植到自己熟悉的平台上进行实现。等我做到一个算是合格的显示时,在整理整理资料全部开源。[比如在5寸屏上等比例放大显示,或者全屏显示,绘制配套的专用电路板后,在开源]

三、改装步骤

1.拆开示波器

  因为示波器是220V供电,拆之前,请先断电,并打开开关放置一段时间,让电源板上电容内部的余电释放一下,以防止出现触电意外。在整个改装过程中,可以不拆电源板,也尽量不用去动他。

  为保安全,非专业人员请勿私自拆开!!!
  为保安全,非专业人员请勿私自拆开!!!
  为保安全,非专业人员请勿私自拆开!!!

  1.在示波器上方的提手下面藏着外壳上唯二的两颗螺丝,需要先小心翼翼的将提手拿下,才能将螺丝拧下。在拆提手时一定要小心一点,因为经过10几年的时间,已经变得比较脆,老化了,很容易断。我的就断了[捂脸]😅。
   [待补图]
  2.拆下螺丝后,要先将示波器按键面板上所有的旋钮拔下来,将电源开关的帽也拔下来。前面板的上方没有卡扣,在下方有几个卡扣,轻轻用塑料片撬开即可。
  [待补图]
  3.将示波器主体从壳内整个拿出,将屏幕排线、屏幕背光灯线、按键板排线从主板上拔下。要先拆下按键电路板,才能拆下屏幕。
  [待补图]
  4.屏幕排线由左向右依次为1-12引脚,与手册引脚对应。
  [待补图]

2.自己DIY

  此时,可根据自己的需求选择直接替换掉屏幕,或者两块屏幕共存等。因为在项目此时,还不适合直接改装到可以使用的地步,所以不提任何建议,大家自行脑洞即可。

四、最后

  本文会不断添加新的进度,请耐心等待,如有大的进度改进,会另起博客,但是会在此设置跳转。本人技术水平有限,可能出现错误等问题,请大家多多指教。

有关泰克示波器TDS210更换IPS彩色屏幕的更多相关文章

  1. 屏幕录制为什么没声音?检查这2项,轻松解决 - 2

    相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声

  2. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  3. ruby - 安装 tiny_tds 在 mac os 10.10.5 上出现错误 - 2

    我正在使用macos,我想使用ruby​​驱动程序连接到sqlserver。我想使用tiny_tds,但它给出了缺少free_tds的错误,但它已经安装了。怎么能过这个?~brewinstallfreetdsWarning:freetds-0.91.112alreadyinstalled~sudogeminstalltiny_tdsBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtiny_tds:ERROR:Failedtobuildgemnativeextension.完整日志如下:/System

  4. ruby-on-rails - 在服务器端检测屏幕尺寸和像素密度? - 2

    我一直在做一些研究,我想我已经知道答案了,但我想知道是否有任何方法可以在不使用javascript或依赖CSS3媒体的情况下获得设备的屏幕尺寸和像素密度查询。本质上,我正在研究如何获取屏幕分辨率和像素密度,以便服务器可以决定在URI请求中为服务器提供哪个图像。到目前为止,我还没有发现任何证据表明这是可能的,但我想嘿,为什么不问问呢? 最佳答案 我不完全同意上面的正确答案。实际上,这个答案在很多情况下都是正确的……但理论上并非如此。通常向Web服务器发出的请求包含一个User-Agent字段,从理论上讲,该字段可用于识别有关设备屏幕分

  5. ruby - 以编程方式在 Ruby 中获取桌面的屏幕截图? - 2

    我问了这个关于takingapictureofawebpageprogrammatically的问题,我已经下载并获得了webkit2png工作(为博客等HTML页面拍照)。太酷了,谢谢你给我看!现在我想开始做更多的事情,比如能够在加载Flash网站和我的桌面后拍照。是否可以使用webkit2png为Flash网站拍照(考虑到您可能需要等待几秒钟才能加载)?但主要问题是,如何以编程方式为桌面拍照?这将使我能够更好地控制正在发生的事情。 最佳答案 您可以使用xwd(1)获取根窗口的屏幕截图:xwd-display:0-root|xwd

  6. ruby - 彩色输出打破了 readline 的换行 - 2

    我正在使用Ruby中的readline为一些输出着色,但我没有运气让换行正常工作。例如:"\e[01;32mThispromptisgreenandbold\e[00m>"期望的结果是:Thispromptisgreenandbold>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa我实际得到的是:aaaaaaaaaaaisgreenandbold>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa如果我删除颜色代码,换行会正常工作。我知道使用bash,如果颜色代码被错误地终止,就会发生这种情况,但我已经尝试了

  7. ruby - (Watir webdriver) 在 OSX 10.9 中使用多显示器时如何将浏览器移动到另一个屏幕 - 2

    我知道有一个名为browser.window.move_to(0,0)的函数可以将浏览器移动到不同的位置,但OSX10.9对它来说是全新的。有什么方法可以将浏览器移动到另一个桌面吗?例如。在“桌面2”中触发命令的控制台,但我希望浏览器出现在“桌面1”中。非常感谢! 最佳答案 哈,在我尝试这个之前我正要说这可能是不可能的:browser.window.move_to(-1200,0)我的第二台显示器位于主屏幕的左侧。有效。好问题。您需要花点时间才能正确使用它,但watir似乎能够使用整个显示器Canvas。例如,如果您的显示器位于主屏

  8. ruby - 如何使用 ruby​​ 和 unix 服务器截取网页的屏幕截图? - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion我正在尝试以编程方式创建大量网页的缩略图,这些网页托管在我自己的基于ruby​​/rails的网站上。我希望能够编写一个独立的ruby​​代码,看起来像这样:require'awesome-screenshot-maker'items.eachdo|id|url="http://foo.com/bar/#{id}"shooter=AwesomeScreenshotMa

  9. ruby-on-rails - 在 rake 任务中打印到屏幕 - 2

    我有一个长时间运行的rake任务。我时不时地在屏幕上打印更新,让我知道任务已经完成了多长时间。puts"Almostthere..."我的问题是所有puts语句似乎都缓冲在某处,直到任务完成后才会打印到屏幕上。届时,它们将被一次性全部打印出来。有什么方法可以强制他们在任务运行时打印吗? 最佳答案 STDOUT.sync=true 关于ruby-on-rails-在rake任务中打印到屏幕,我们在StackOverflow上找到一个类似的问题: https://

  10. ruby-on-rails - 在不使用屏幕的情况下在后台运行 ruby​​ 脚本 - 2

    我在Rails环境中有两个必须全天候运行的脚本。我在远程服务器上工作,所以我需要使用ssh启动脚本,这意味着我需要一直打开ssh窗口。我正在寻找一种在后台运行这些脚本的简单方法,这样它们就不会在我关闭ssh连接后立即被取消。我不想使用屏幕。我认为必须有更简单的方法来处理这个问题。不是吗? 最佳答案 我认为最基本的解决方案是nohup:nohupmyscript&>/dev/null& 关于ruby-on-rails-在不使用屏幕的情况下在后台运行ruby​​脚本,我们在StackOver

随机推荐