AIX自带FTP服务器日志开启步骤

本文介绍如何在AIX系统中配置FTP服务器的日志记录功能。主要步骤包括:修改syslog配置文件添加日志输出路径,刷新syslogd服务,调整inetd配置启用FTP服务日志记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[b]AIX自带FTP服务器日志开启步骤[/b]

1、修改/etc/syslog.conf文件,并加入一行:
daemon.info FileName
其中FileName是日志文件的名字,格式如:/var/log/txyftp.log。
注意:FileName这个文件必须在做下一步骤前手动创建。

2.运行"refresh -s syslogd"命令刷新syslogd后台程序。

3.修改/etc/inetd.conf文件,

ftp stream tcp6 nowait root /usr/sbin/ftpd ftpd
修改为
ftp stream tcp6 nowait root /usr/sbin/ftpd ftpd -l

4.运行“refresh -s inetd”命令;
或者运行“stopsrc -s inetd”命令成功后,再执行“startsrc -s inetd”命令。
我们正在AIX服务器上编写脚本,使用FTP迁移70万个文件,并记录失败的文件到error日志步骤:1.准备一个包含所有要迁移的文件名的列表文件(比如filelist.txt)。2.编写脚本,循环读取文件列表中的每个文件名。3.对于每个文件,使用FTP命令尝试传输。4.如果传输失败,将文件名记录到错误日志(比如error.log)中。注意:由于文件数量巨大(70万个),我们需要考虑脚本的执行效率。但是,由于使用FTP逐个传输,主要时间会花在传输上,脚本循环开销相对较小。然而,FTP每次传输一个文件都需要建立连接、登录、传输、断开连接,这样效率非常低。建议使用支持批量传输的FTP方式(如mput),但这样又难以记录每个失败的文件名。折中方案:我们可以使用一个循环,但在循环内为每个文件建立一次FTP连接。这样虽然效率不高,但可以准确记录每个文件传输成功与否。但是,如果每个文件都建立一次FTP连接,70万个文件意味着70万次连接,这在时间和资源上都是巨大的消耗。因此,我们可能需要考虑其他工具,如rsync、scp或者支持断点续传和错误重传的工具,但用户要求使用FTP。如果必须使用FTP,我们可以尝试在单个FTP连接中传输多个文件,并通过检查FTP的返回码来判断每个文件是否成功。然而,在标准的FTP客户端中,通常只能得到整个FTP会话的返回码,而不是每个文件的。因此,我们可能需要编写一个脚本来解析FTP日志输出,以判断每个文件是否传输成功。但这会复杂一些。另一种思路:使用一个包含多个文件传输命令的FTP脚本,然后逐行执行,并捕获每一行的错误。我们可以生成一个包含每个文件传输命令的FTP脚本,然后运行这个脚本,同时将输出重定向到一个日志文件。然后分析这个日志文件,找出失败的文件。但是,考虑到70万个文件,生成的FTP脚本会非常大,可能难以处理。权衡之下,我们采用每次一个文件的方式,但优化FTP连接:使用一个FTP连接连续传输多个文件(比如100个)然后断开。这样可以减少连接次数(从70万次减少到7000次,如果每批100个的话)。然后记录每次批处理中失败的文件(如果有的话)。这样就需要在脚本中实现一个分批处理的逻辑。不过,用户要求记录失败的文件名,我们还是要记录到每个文件。因此,我们决定采用每传输一个文件就记录一次的方式。但为了减少连接开销,我们在一个FTP连接中传输多个文件(比如1000个)。我们可以将文件列表分成多个批次,每批1000个文件。对于每一批,我们建立一个FTP连接,然后逐个传输这批中的文件(使用put命令),并在FTP会话中捕获错误信息,同时将错误信息重定向到一个日志文件中。然后我们解析这个日志文件,找出失败的文件名。但注意,在一个FTP会话中传输多个文件时,我们需要在一个FTP会话中执行多个命令。我们可以编写一个包含多个put命令的输入流。例如,对于一批文件,我们可以这样:ftp-nhost<< EOFuserusernamepasswordbinarycdremote_directorylcdlocal_directoryputfile1putfile2...quitEOF然后,我们解析FTP的输出日志,如果某个put命令失败了,就将对应的文件名写入错误日志。然而,解析FTP的输出日志可能比较复杂,因为不同的FTP服务器返回的信息可能不同。另一种方法是,我们可以通过检查每个put命令执行后的FTP返回代码(在FTP交互中,每个命令执行后都有一个返回码,成功通常是226,但每个文件传输成功返回226?)但我们在脚本中如何获取每个命令的返回码呢?实际上,在AIXFTP客户端中,我们可以通过脚本捕获每个命令的输出,但是用这种方式,我们需要逐条命令处理。因此,我们可以将每批的FTP命令拆分成每个文件单独执行,但将命令全部写在一个输入流中,然后捕获整个FTP会话的输出。然后通过grep或awk分析输出,找出传输失败的文件。在FTP的输出中,通常当一个文件传输失败时,会有错误信息,比如“550Filenotfound”或“452Transferaborted”等,并且会伴随有文件名。所以,我们可以在生成每批的FTP命令时,为每个put命令添加一个空操作(如使用promptoff避免交互提示),然后记录详细的日志。我们可以将每批FTP命令的执行输出重定向到一个临时文件,然后从临时文件中提取失败的文件名。具体步骤:1.将70万个文件的列表分成多个批次,每个批次包含1000个文件(批次大小可调整)。2.对于每个批次,生成一个FTP命令序列(包括登录、设置传输模式、设置本地和远程目录、关闭提示等,然后对每个文件执行put,最后退出)。3.将FTP命令序列输入到ftp命令中,并将标准错误和标准输出重定向到一个临时日志文件。4.解析临时日志文件,查找每个put命令的错误。如果发现某个put命令对应的输出中包含错误,则将该文件名写入错误日志(error.log)。5.删除临时日志文件。但是,这样每次批处理都需要生成一个临时日志文件,处理完再删除。而且,解析FTP日志需要写一个解析器。为了简化,我们可以在FTP会话中使用详细的输出模式(verboseon),这样每个命令的执行结果都会显示。然后我们可以在FTP命令脚本中,为每个put命令添加一个唯一的标记,这样在解析日志时可以知道是哪个文件。不过,我们也可以使用一个简单的办法:因为每个put命令会输出一行提示,比如“local:filenameremote:filename”,然后接着下一行是传输结果。我们可以利用这个格式。例如,一个成功的put输出可能是:200PORTcommandsuccessful.150Openingdataconnectionforfilename.226Transfercomplete.失败可能是:550filename:Filenotfound.但是,不同的FTP服务器返回信息不同。这里,我们假设FTP服务器返回的信息格式是标准的,并且每个文件传输都会返回一个状态码(226表示成功,4xx或5xx表示错误)。我们可以编写一个脚本解析每批的FTP输出日志,对于每个文件,检查其输出中是否包含“226Transfercomplete”,如果不包含,并且有错误代码,则记录该文件。但是,注意一个FTP会话中多个文件连续传输,输出可能会交错,所以我们需要确保每个put命令和它的输出之间有关联。由于FTP输出是顺序的,我们可以在每两个命令之间插入一个无操作命令(如空命令,或者打印一个分隔符,但FTP不支持直接打印自定义信息)。我们可以在put命令之前输出一个唯一的标记,然后捕获这个标记后面的行,直到下一个标记之前,这样就能确定每个文件的传输结果。但是,FTP命令中不支持插入自定义输出。另一种思路:使用“size”命令检查文件是否传输成功。在每次put之后,我们可以在FTP会话中立即执行“size文件名”来检查远程文件是否与本地文件大小一致。但是,这样会增加额外的命令,而且也需要解析size命令的结果。为了不过于复杂,我们决定先采用简单的方式:每批传输结束后,我们直接解析FTP输出日志,通过查找每个put命令后的响应码(226表示成功),如果遇到非226的响应码(4xx,5xx),则认为该文件传输失败,记录文件名。但需要注意的是,在FTP的主动或被动模式下,输出的日志可能会有区别。综合考虑,由于70万文件量巨大,且我们无法完全保证FTP日志解析的可靠性,我们可能先尝试一个简单的方法,然后通过记录详细的日志来手动检查。因此,我们采用如下步骤:1.将文件列表分成多个批次。2.为每个批次生成一个FTP脚本(包含该批次所有文件的put命令)。3.运行FTP,并将输出重定向到临时日志。4.解析临时日志,对于每个文件,查找其put命令后面的响应行,如果包含错误,则记录。但是,为了简化,我们可以只检查每个put命令之后的两行内是否有“226”(因为FTP的响应通常在put命令后立刻返回,而且响应可能有多行,但最后一行是状态码行)。实际上,每个文件传输结束时都会返回一个226或者错误码。我们可以这样:在临时日志中,每个put命令后,我们会看到一行以“2..”开头的行表示开始传输,最后以“226”表示成功,以其他4或5开头的代码表示失败。我们只需要扫描整个日志文件,找到每个以“226”或“4..”或“5..”开头的行,并且它们的前一行包含该文件名(因为put命令输出后,FTP会返回响应,响应里有时会包含文件名)。然而,这种方法并不完全可靠,因为响应信息可能不包含文件名。我们决定:在生成FTP命令时,每put一个文件之后,立即添加一个命令:echo"Transfercompletedforfile:filename"。但是,FTP协议不支持echo命令。所以这个方法行不通。因此,我们只能通过FTP自身的输出来判断。一个相对可靠的方法是使用“get”命令来检查文件大小,但这会额外增加时间。如果我们选择在每批传输完成后,再检查每个文件是否在远程服务器上存在以及大小是否正确,那么我们就需要在FTP脚本中添加每个文件传输后的size命令,并解析size命令的输出。步骤调整:对于一批中的每个文件,执行:put<localfile><remotefile>size<remotefile>然后,比较本地文件大小和size命令返回的大小。如果相同,则认为成功,否则失败。那么,我们在FTP脚本中可以这样写:...putfile1sizefile1putfile2sizefile2...然后,我们捕获每个size命令的返回。size命令成功执行会返回文件大小,失败会返回错误。例如,本地文件大小我们可以提前记录在一个文件里,然后在解析FTP日志时,比较size命令返回的大小是否等于本地文件大小。但这样需要在FTP会话中获取文件
最新发布
06-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值