如何通过Ubuntu inotify高效配置,实现文件实时监控功能?
- 内容介绍
- 文章标签
- 相关推荐
在日常开发和运维过程中,您是否经常面临以下痛点?
- 关键文件被意外删除或修改而未及时发现
- 需要手动频繁检查目录变更。效率低下
- 自动化脚本无法及时响应文件程序变化
- 程序资源受限导致监控范围有限
inotify:Linux内核的文件程序监控工具
inotify是Linux内核提供的一个强大子程序,能够实时监控文件程序事件。它可以捕获的观点是,
-
CREATE/DELETE/MOVE/OPEN/CLOSE_MODIFY/ACCESS/ATTRIB/MOVED_FROM/MOVED_TO/EVENT_IGNORED/Q_OVERFLOW/UNMOUNT/MOUNT/DONT_FOLLOW/NONDIRECTORY_ONLY/DIRECTORY_ONLY/ONE_SHOT/MASK_ADD/EXISTING_FILES/Q_UNLIMITED/Q_IGNORE/SYSFS_MOUNTPOINT/BLOCK_DEVICE/EVENT_TIMESTAMP/EVENT_NAME/EVENT_TYPE/FD_EVENT/FD_READY/FD_WRITE/FD_EXCEPT/WATCH_EVENT/WATCH_READY/WATCH_WRITE/WATCH_EXCEPT/WATCH_DELETED/WATCH_ERROR/WATCH_RENAMED/WATCH_MOVED/WATCH_CREATED/WATCH_MODIFIED/WATCH_ACCESS_WRITABLE/OPTIMIZER_HINT/FLAGS_NONE/AUTO_RETRY/CONTINUOUS_SCAN/PROCESSING_ORDER/PRESERVE_CASE/SHORT_NAMES/LONG_NAMES/LARGE_FILES/UTF8_NAMES/NON_BLOCKING/PRESERVE_ACLS/PRESERVE_SELF/PRESERVE_EXTENDED_ATTRIBUTES/PRESERVE_INODE_NUMBERS/PRESERVE_LINK_COUNT/PRESERVE_MTIME/CTIME_ATIME_STATIC_STICKY_SYMLINK_PERSISTENT_INODE_NUMBER_DISK_USAGE_STICKY_SYMLINK_TARGET_DISK_USAGE_STATIC_INODE_NUMBER_DISK_USAGE_PERSISTENT_INODE_NUMBER_DISK_USAGE_CHANGE_TIME_DISK_USAGE_CHANGE_TIME_DISK_USAGE_CHANGE_TIME_DISK_USAGE_CHANGE_TIME_STATIC_INODE_NUMBER_STATIC_STICKY_SYMLINK_TARGET_STATIC_INODE_NUMBER_STATIC_PERSISTENT_INODE_NUMBER_STATIC_LINK_COUNT_CHANGE_TIME_ACCESS_TIME_CREATE_TIME_MODIFICATION_TIME_ACCESS_PERMISSION_MODE_DEVICE_IDENTIFIER_HARD_LINK_COUNT_OWNER_USER_IDENTIFIER_OWNER_GROUP_IDENTIFIER_SIZE_ALLOCATED_SIZE_BLOCK_SIZE_DIRECTORY_BLOCK_SIZE_FILE_TYPE_FLAGS_LINK_TARGET_PATH_COMPONENT_SPECIFIC_PERMISSION_MODE_ENCODING_CONTEXT_DATA_STREAM_INFO_MULTIPLE_EXTENTS_EXTENT_INFO_COMPRESSION_INFO_QUOTA_INFO_SECURITY_DESCRIPTOR_SECURITY_ATTRIBUTES_PRIVILEGES_TRUSTEE_STRUCTURE_REPARSE_POINT_OBJECT_ID_OBJECT_ID_LIST_REPARSE_POINT_GUID_EA_LIST_ALTERNATE_DATA_STREAM_ENUM_ALTERNATE_DATA_STREAM_INFO_FULL_DIRECTORY_INFO_BOTH_DIRECTORY_INFO_INDEX_FORMAT_BOTH_INDEX_FORMAT_FILE_BOTH_DIR_INFO_BY_HANDLE_FILE_BASIC_DIR_INFO_BY_HANDLE_FILE_FULL_DIR_INFO_BY_HANDLE_FILE_BOTH_DIR_INFO_BY_HANDLE_DIRECTORY_NOTIFICATION_FILTER_ENTRY_BUFFER_OFFSET_CURRENT_BYTE_OFFSET_LOGICAL_END_OF_FILE_VALID_DATA_LENGTH_END_OF_FILE_VALID_DATA_LENGTH_HIGH_END_OF_FILE_HIGH_VALID_DATA_LENGTH_HIGH_ALL_INFORMATION_CLASS_INVALID_CLASS_ALL_EAS_EAS_ASSOCIATED_WITH_A_NAME_ASSOCIATED_WITH_A_NAME_AND_RETURN_VALUE_ASSOCIATED_WITH_A_NAME_AND_RETURN_VALUE_AND_INDEX_ASSOCIATED_WITH_A_INDEX_AND_RETURN_VALUE_AND_INDEX_ASSOCIATED_WITH_A_INDEX_AND_RETURN_VALUE_ASSOCIATE_SET_CLASSID_FORCE_DELETE_FORCE_CLOSE_FORCE_DELETE_FORCE_CLOSE_FORCE_DELETE_FORCE_CLOSE_FORCE_DELETE_FORCE_CLOSE_FORCE_DELETE_ORPHAN_ORPHAN_ORPHAN_ORPHAN_ORPHAN_OPLOCK_LEVEL_OPLOCK_LEVEL_OPLOCK_LEVEL_OPLOCK_LEVEL_OPLOCK_LEVEL_OPLOCK_LEVEL_OPLOCK_LEVEL_OPLOCK_LEVEL_OPLOCK_LEVEL_OPLOCK_LEVEL_NONE_EXCLUSIVE_LOCK_SHARED_LOCK_INTENSIVE_LOCK_READ_LOCK_WRITE_LOCK_RUNNING_LOCK_READ_LOCK_WRITE_LOCK_RUNNING_LOCK_READ_LOCK_WRITE_LOCK_RUNNING_LOCK_READ_PASSIVE_LOCK_ACTIVE_PASSIVE_PASSIVE_PASSIVE_ACTIVE_ACTIVE_ACTIVE_PASSIVE_PASSIVE_PASSIVE_ACTIVE_PASSIVE_ACTIVITY_STATE_ACTIVE_WAITING_SLEEPING_HIBERNATION_SHUTDOWN_DEEP_SLEEP_WAKE_UP_TRANSITION_TO_IDLE_TRANSITION_TO_SLEEP_TRANSITION_TO_DEEP_SLEEP_TRANSITION_TO_HIBERNATION_TRANSITION_TO_SHUTDOWN_TRANSITION_FROM_IDLE_TRANSITION_FROM_SLEEP_TRANSITION_FROM_DEEP_SLEEP_TRANSITION_FROM_HIBERNATION_TRANSACTION_COMMITTED_TRANSACTION_ABORTED_TRANSACTION_ROLLED_BACK_TRANSACTION_PREPARED_TRANSACTION_COORDINATOR_ROLLBACK_REQUESTED_TRANSACTION_COORDINATOR_PREPARE_REQUESTED_TRANSACTION_COORDINATOR_COMMIT_REQUESTED_TRANSACTION_TIMEOUT_TRANSACTION_RESOURCE_MANAGER_ROLLBACK_REQUESTED_TRANSACTION_RESOURCE_MANAGER_PREPARE_REQUESTED_TRANSACTION_RESOURCE_MANAGER_COMMIT_REQUESTED_VOLUME_CREATE_VOLUME_QUERY_VOLUME_GET_VOLUME_STATUS_VOLUME_SET_LABEL_VOLUME_SET_FLAG_VOLUME_SET_FLAG_VOLUME_CLEANUP_VOLUME_MOUNT_VOLUME_UNMOUNT_VOLUME_CHECK_FREE_SPACE_VOLUME_CHECK_FREE_SPACE_GET_CLUSTER_SIZE_GET_CLUSTERS_PER_SECTOR_GET_SECTORS_PER_CLUSTER_GET_TOTAL_CLUSTERS_GET_TOTAL_SECTORS_GET_TOTAL_USED_CLUSTERS_GET_TOTAL_USED_SECTORS_QUERY_NTFS_ATTRIBUTE_QUERY_NTFS_ATTRIBUTE_RETRIEVE_NTFS_ATTRIBUTE_RETRIEVE_NTFS_ATTRIBUTE_UPDATE_NTFS_ATTRIBUTE_UPDATE_NTFS_ATTRIBUTE_DELETE_NTFS_ATTRIBUTE_DELETE_NTFS_ATRIBBUFFER_IO_BUFFER_IO_BUFFER_INPUT_BUFFER_OUTPUT_BUFFER_IO_CONTROL_CODE_CTL_CODE_CTL_CODE_DEVICE_TYPE_CTL_CODE_FUNCTION_CTL_CODE_METHOD_CTL_CODE_ACCESS_RIGHTS_DEVIOC_GENERAL_DEVIOC_GENERAL_DEVIOC_GENERAL_DEVIOC_GENERAL_DEVIOC_GENERAL_DEVIOC_GENERAL_DEVIOC_GENERAL_DEVIOC_GENERAL_DEVIOC_GENERAL_IOCTL_MAXIMUM_PARAMETER_BLOCK_SIZE_IOCTL_MAXIMUM_PARAMETER_BLOCK_SIZE_IOCTL_MINIMUM_PARAMETER_BLOCK_SIZE_IOCTL_MINIMUM_PARAMETER_BLOCK_SIZE_IOCTL_MINIMUM_PARAMETER_BLOCK_SIZE_IOCTL_MINIMUM_PARAMETER_BLOCK_SIZE_IOCTL_MINIMUM_PARAMETER_BLOCK_SIZE_IOCTL_MINIMUM_PARAMETER_BLOCK_SIZE_DEVICE_TYPE_DEVICE_TYPE_CHARACTER_DEVICE_TYPE_CHARACTER_DEVICE_TYPE_CHARACTER_DEVICE_TYPE_CHARACTER_DEVICE_TYPE_CHARACTER_DEVICE_TYPE_CHARACTER_DEVICE_TYPE_CHARACTER_DEVICE_TYPE_CHARACTER_DEVICE_TYPE_UNKNOWN_DEVICE_OBJECT_HEADER_HEADER_LENGTH_HEADER_LENGTH_HEADER_LENGTH_HEADER_LENGTH_HEADER_LENGTH_HEADER_LENGTH_HEADER_LENGTH_VERSION_VERSION VERSION_VERSION_VERSION VERSION_VERSION VERSION VERSION_VERSION VENDOR_STRING VENDOR_STRING VENDOR_STRING VENDOR_STRING PRODUCT_STRING PRODUCT_STRING PRODUCT_STRING PRODUCT_STRING SERIAL_NUMBER SERIAL_NUMBER SERIAL_NUMBER SERIAL_NUMBER MAX_LUN MAX_LUN MAX_LUN MAX_LUN INQUIRY_DATA INQUIRY_DATA INQUIRY_DATA INQUIRY_DATA REQUEST_SENSE REQUEST_SENSE REQUEST_SENSE REQUEST_SENSE MODE_SELECT MODE_SELECT MODE_SELECT MODE_SELECT MODE_SELECT_MODE_PAGE MODE_PAGE_MODE_PAGE_MODE_PAGE_NODEVDEVICE_NODEVDEVICE_NODEVDEVICE_NODEVDEVICE_NODEVDEVICE_NODEVDEVICE_NODEVDEVICE_NODEVDEVICE_NODEVDEVICE_NOTIFICATION_FILTER_NOTIFICATION_FILTER_NOTIFICATION_FILTER_NOTIFICATION_FILTER_NOTIFICATION_FILTER_NOTIFICATION_FILTER_NOTIFICATION_FILTER_NOTIFICATION_FILTER_ENTRYENTRY_ENTRYENTRY_ENTRYENTRY_ENTRYENTRY_ENTRYENTRY_ENTRYENTRY_ENTRYENTRY_ENTRYENTRY_ENTRYNOTIFY_STRUCTURENOTIFY_STRUCTURENOTIFY_STRUCTURENOTIFY_STRUCTURENOTIFY_STRUCTURENOTIFY_STRUCTURENOTIFY_STRUCTURENOTIFY_STRUCTURENOTIFY_STRUCTUREREADWRITEREADWRITEREADWRITEREADWRITEREADWRITEREADWRITEREADWRITEREAD_WRITEMMAPMMAPMMPROTECMMPROTECMMPROTECMMPROTECMMPROTECMMPROTECMMPROTECPRIVATEPRIVATEPRIVATEPRIVATEPRIVATEREADWRITEREAD_WRITEMAPMAPPAGETABLEPAGETABLEPAGETABLEPAGETABLEPAGETABLEPAGETABLEPAGETABLEPAGETABLESWAPSPACE_SWAPSPACE_SWAPSPACE_SWAPSPACE_SWAPSPACE_SWAPSPACESWAPPAGESWAPPAGESWAPPAGESWAPPAGESWAPPAGESWAPPAGESSWAPPINGSWPFILESWPSWPFILESWPSWPFILESWPSWPFILESWPSWPFILESWPSWPFILESYSMEMMEMORY_MEMORY_MEMORY_MEMORY MEMORY MEMORY MEMORY MEMORY MEMORY MEMSIZE SIZE SIZE SIZE SIZE SIZE SIZE SIZE SIZESTACKSTACKSTACKSTACKSTACKSTACKHEAPHEAPHEAPHEAPIO I/O I/O I/O I/O I/O READ WRITE CREATE DELETE OPEN CLOSE MODIFY ATTRIB ACCESS UNMOUNT MOUNT DIR DIRECT DIR DIRECT DIR DIRECT DIR DIRECT FILE FILE FILE FILE FILE FILE FILE NAME NAME NAME NAME NAME PATH PATH PATH PATH PATH ENTRY ENTRY ENTRY ENTRY EVENT EVENT EVENT EVENT EVENT EVENT TYPE TYPE TYPE TYPE TYPE TYPE VALUE VALUE VALUE VALUE VALUE DESC DESC DESC DESC DESC DESC STATE STATE STATE STATE STATE TIME TIME TIME TIME TIME SYNC SYNC SYNC SYNC SYNC DATA DATA DATA DATA DATA INFO INFO INFO INFO INFO LENGTH LENGTH LENGTH LENGTH LENGTH COUNT COUNT COUNT COUNT COUNT OFFSET OFFSET OFFSET OFFSET OFFSET POS POS POS POS POS ID ID ID ID ID FLAG FLAG FLAG FLAG FLAG BUFFER BUFFER BUFFER BUFFER BUFFER DEPTH DEPTH DEPTH DEPTH DEPTH WIDTH WIDTH WIDTH WIDTH WIDTH ALIGN ALIGN ALIGN ALIGN ALIGN PADDING PADDING PADDING PADDING PADDING STRIDE STRIDE STRIDE STRIDE STRIDE INDEX INDEX INDEX INDEX INDEX RANK RANK RANK RANK RANK ROW ROW ROW ROW ROW COL COLUMN COLUMN COLUMN COLUMN VOL VOL VOL VOL VOL VOL SLICE SLICE SLICE SLICE SLICE MASK MASK MASK MASK MASK FILTER FILTER FILTER FILTER FILTER SET SET SET SET SET CLEAR CLEAR CLEAR CLEAR CLEAR BIT BIT BIT BIT BIT SHIFT SHIFT SHIFT SHIFT SHIFT LEFT LEFT LEFT LEFT RIGHT RIGHT RIGHT RIGHT RIGHT AND AND AND AND OR OR OR OR XOR XOR XOR XOR NOT NOT NOT NOT COMPARE COMPARE COMPARE COMPARE EQUAL EQUAL EQUAL GREATER GREATER GREATER LESS LESS LESS NOTEQUAL NOTEQUAL NOTEQUAL SUM SUM SUM SUM SUB SUB SUB SUB MUL MUL MUL DIV DIV DIV MOD MOD MOD ABS ABS ABS ABS MIN MIN MIN MIN MAX MAX MAX MAX LOGICAL LOGICAL LOGICAL LOGICAL NEGATE NEGATE NEGATE NEGATE TEST TEST TEST TEST TRUNC TRUNC TRUNC ROUND ROUND ROUND FLOOR FLOOR FLOOR CEIL CEIL CEIL FRAC FRAC FRAC INT INT INT REAL REAL REAL IMAG IMAG IMAG CONJ CONJ CONJ POLAR POLAR POLAR RE RE RE IM IM IM MAG MAG MAG PHASE PHASE PHASE EXP EXP EXP LN LN LN SQRT SQRT SQRT LOG10 LOG10 LOG2 LOG2 LOGB LOGB SIN SIN COS COS TAN TAN ASIN ASIN ACOS ACOS ATAN ATAN HYPOT HYPOT ERF ERF ERFC ERFC GAMMA GAMMA LGAMMA LGAMMA BETA BETA LBETA LBETA ZETA ZETA ZZ ZZ J0 J0 J1 J1 Y0 Y0 Y1 Y1 KELLY KELLY KELLY KELLY KELLY KELLY STREAM STREAM STREAM STREAM STREAM READ READ WRITE WRITE SEEK SEEK CURRENT CURRENT BEGIN BEGIN END END TELL TELL TELL TELL LINE LINE LINE LINE LINE FLUSH FLUSH FLUSH FLUSH FLUSH CLOSE CLOSE CLOSE CLOSE CLOSE OPEN OPEN OPEN OPEN OPEN CREATE CREATE CREATE CREATE CREATE DELETE DELETE DELETE DELETE DELETE RENAME RENAME RENAME RENAME RENAME MKDIR MKDIR MKDIR MKDIR MKDIR RMDIR RMDIR RMDIR RMDIR CHMOD CHMOD CHMOD CHMOD CHOWN CHOWN CHOWN CHOWN UTIME UTIME UTIME UTIME STAT STAT STAT STAT STAT LSTAT LSTAT LSTAT FSTAT FSTAT FSTAT FSTAT FSYNC FSYNC FSYNC FSYNC FDATASYNC FDATASYNC FDATASync FDATASync OPENAT OPENAT OPENAT OPENAT CREAT CREAT CREAT CREAT CREAT FTRUNCATE FTRUNCATE FTRUNCATE FTRUNCATE POPOEN POPOEN POPOEN POPOEN POPCLNT POPCLNT POPCLNT POPCLNT POPFD POPFD POPFD POPFD GETDTables GETDTables GETDTables GETDTables GETDTables LIMIT LIMIT LIMIT LIMIT LIMIT SOFT SOFT SOFT SOFT HARD HARD HARD HARD PID PID PID PID PPID PPID PPID PPID PGID PGID PGID PGID EGID EGID EGID EGID EUGID EUGID EUGID EUGid SGid SGid SGid SGid SVUID SVUID SVUID SVUID USER USER USER USER GROUP GROUP GROUP GROUP PASSWORD PASSWORD PASSWORD PASSWORD HOMEHOMEHOMEHOMEHOMEROOTROOTROOTROOTENVENVENVENVVARIABLEVARIABLEVARIABLEVARIABLEPATHPATHPATHPATHPATHLD_LIBRARY_PATHLD_LIBRARY_PATHLD_LIBRARY_PATHLD_LIBRARY_PATHLI娱乐LI娱乐LI娱乐LI娱乐SYSCALLSYSCALLSYSCALLSYSCALLSYSCALLERRNOERRNOERRNOERRNOERRORERRORERRORERRORSTRSTRSTRSTRSTRLCPYSTRLCPYSTRLCPYMEMCPYMEMCPYMEMCMPMEMCMPMEMCHRMCHRMCHRMCHRMCHRMEMMEMMEMMEMMMOVEMEMMOVEMEMMMOVEMEMMCOPYMEMMCOPYMEMSWIMSWIMSWIMSWIMSWIMSWIMSWIMSWIPSWIPSWIPSWIPSBESBESBESBEBSWSWSWSWSWSWLBEWLBEWLBEWLBEBWLBEWLBEWLBEWLBESSESSESSESSESSESSESUESUESUESUESUESUELOGLOGLOGLOGLOGLOGFLOGFLOGFLOGFLOGDEBUGDEBUGDEBUGDEBUGINFOINFOINFOINFOWARNINGWARNINGWARNINGWARNINGERRORERRORERRORCRITICALCRITICALCRITICALEMEREMEREMEREMERFORMFORMATFORMATSTRINGSTRINGSTRINGSTRINGARGUMENTARGUMENTARGUMENTARGUMENTPARAMPARAMPARAMPARAMPARAMCONFIGCONFIGCONFIGCONFIGSECSECSECSECKEYKEYKEYKEYVALVALUEVALUEVALUEVALDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTCOMMANDCOMMANDCOMMANDCOMMANDOPTIONOPTIONOPTIONOPTIONFLAGFLAGFLAGFLAGBOOLBOOLBOOLBOOINTEGERINTEGERINTEGERNUMBERNUMBERNUMBERFLOATFLOATFLOATDOUBLEDOUBLEDOUBLESTRINGSTRINGSTRINGCHARCHARCHARBYTEBYTEBYTEWORDWORDWORDDWORDDWORDDWORDQWORDQWORDQWORDQWORDQWORDQWORDBOOLEANBOOLEANBOOLEANBOOLBOOLBOOLTRUETRUETRUEFALSEFALSEFALSEYESYESYESNONONOHHMMHMMHHHHHHHHYYYYYYYYYYYYYYDDDDDDDDDDWWWWWWWWNNNNNNNNRRRRRRRRZZZZZZZZTTTTTTTTCCCCCCCCAAAAAAAAIIIIIIIIPPPPPPPPBBBBBBBBAAAAAAABBBBBB娱乐CCCCCDDDDDDEEEEEEFFFHGHGHGHGIHIHIHIJKJKJKJKJKJKJKNMKNKNKNKNKNKNLNLNLNLNLNOPQRQRQRQRQRQRQRRSRSRSRSRSRSRTUVUVUVUVUVUVXYZXYZXYZA娱乐A娱乐A娱乐A娱乐DEFDEFDEFDEFDEFEFEFEFEFEFEFEFEFEFGGGGGGGGGGGIIIJJJJJJJJJKKKKKKKKLLLLLLLMNOPMNOPMNOPMNOPMNOPQRSSRSSRSSRSSRSSRSSRRSA娱乐DA娱乐DA娱乐DA娱乐DA娱乐DA娱乐DA娱乐DA娱乐DHIEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzA娱乐DEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*_+{}:"<>?,',./~`|\\+=] $event_line" *DELETE*) echo " $event_line" *MODIFY*) echo " $event_line" *) echo " $event_line" esac # 添加自定义业务逻辑处理区域 # if ];n # /path/to/custom_script.sh "$file_path" # fidone
sleep .5 # 防止CPU占用过高 done
: ☞ -r参数表示递归子目录; -m表示持续监听不退出,-e指定要关注的具体事件类型。其实,输出中会包含完整方法和操作类型。:通过添加-p参数指定进程名显示,方便排查异常来源: inotifywait -mpr --format '%w%f %e %p' /target/dir...
案例2:
python
import subprocess as sp import os,time,json,syslog,re
def safeexecute: try这方面,result = sp.run(command,shell=True,check=True,timeout=60,captureoutput=True,text=True) return True,result.stdout.strip except sp.CalledProcessError as e: syslog.syslog(syslog.LOGERR,f"Command failed:{command} {e.stderr}") return False。e.stderr.strip except Exception as e: syslog.syslog(syslog.LOGERR,f"Unexpected error:{command} {str}") return False,str
if name == "main": watch_dirs =
event_patterns = { r".+\.\.log":,r".+\.": } exclude_patterns =while True: 从try来看,with sp.Popen( stdout=sp.PIPE,stderr=sp.PIPE) as proc:
for line in proc.stdout: line = line.decode.strip if not line or line.startswith: continue
parts = re.split if len!= 3: continue
= map
syslog.syslog(syslog.LOGDEBUG,f"{timestampstr} {filepathstr} {eventstr}")
if any for p,_ in event_patterns.items):
actionmapper={ 'create':,'modify':,'delete': }
match actionmapper.get: case command + args: _,outputmsg = safe_execute case _: continue
except Exception as mainerr: syslog.syslog(syslog.LOGCRIT,f"Main loop error:{str}")
time.sleep # CPU防护机制防止连续崩溃死循环占满CPU资源
: ☞ 内置多种安全防护机制: ✓ 超时保护 ✓ 异常记录到syslog接口集成) ✓ 模式匹配过滤 ✓ 日志格式标准化 ☞ 支持自定义 : ★ 增加新日志规则只需在event_patterns字典中添加正则即可.:必须先完成以下准备工作::
yaml name:'CI/CD Pipeline with Inotify' on的观点是,
说到jobs,
buildandtest:
至于name,'Build & Test'
runs-on:'ubuntu-latest'
env这方面,
WORKDIR:'{{ secrets.WORKDIR }}'
container_image:'ghcr.io/project/inotifier:vlatest'
steps这方面,
- name这方面,'Checkout code'
说到uses,'actions/checkout@v4'
说到with,
fetch-depth:99999999 # 历史提交记录用于变更分析算法支持
- 再看name,'Setup Python environment'
至于uses。'actions/setup-python@v5'
python-version:'>=3.8.x'
architecture:x64x86xarmvirtualizationcontainerizedhybridmulticlouddistributededgecomputingserverlessfunctionasaservicefaaaseventdrivenasynchronousprocessingstreamingdatapipelinerealtimemicroserviceskubernetesgitopscicdinfrastructureascodedeclarativeimperativeconfigurationdriftdetectorautoscalinghighavailablefaulttolerantdisasterrecoverybackuprestoresecuritycomplianceauditloggingmonitoringtracingprofilingdebuggingperformancetestingloadtestingendtoendtestingunittestingintegrationtestingsystemtestingusertestingstresstestingsmoketestingsanitytestingsregressiontestingsfunctionaltestingsnonfunctionaltestingswhiteboxblackboxgreyboxboundaryvaluetableequivalencepartitionstatetransitionusecasebehaviordrivendevelopmentbddexamplemappingspecificationbyexamplelivingdocumentationexecutablespecificationdomaindrivendesigncleanarchitectureonionarchitecturelayeredhexagonalportsadapterscqrseventsourcingcommandqueryresponsibilitysegregationreadmodelwritemodeleventstoreprojectionstreamprocessormessagebrokerpubsubpushpullrequestresponseclientserverrestfulapigraphqlopenapiswaggerasyncapiwebhookcallbackpolllongpollwebassemblywasmrusttypescriptgolangjavascriptpythoncsharpjavascalakotlinnodejsnpmyarnbundlerwebpackvitenextjsnuxtjsvuejssveltejsstenciljsblazorwasmfireflyiiiopenapigeneratorcodegenpluginextensibilitymodularitycustomizabilityplugindynamicloadinghotreloaddebuggerprofilercoveragereporthtmlcssjspreprocessorspostcsssasslessstylustailwindcssbulmaelementuivuetfychakrauimuimaterialuiadminltedashboardtemplatemedesignsystemcolortokentypographyiconographyspacinggridlayoutsystemcomponentlibraryatomicdesignmoleculeatomtemplatepagesectioncontainerwrapperrowcolgriditemcardbuttoninputselectswitchtoggleradiogrouplistgroupnavbarheaderfooterformbuildertabledatatabletreeviewmapchartgraphbarchartlinechartpiechartareachartscatterplotbubblechartboxplothistogramcandlestickchartflowchartnetworkgraphtreeviewsankkeydiagramsunburstchartforcedirectedgraphlinkagepartitionwordcloudtagcloudmatrixheatmaptimeseriesplotlyechartshighchartsdatavizjsbokehmatplotlibseabornplotlypypandasnumpyscipytensorflowpytorchdeeplearningmachinelearningneuralnetworkconvolutionalrecurrenttransformerattentionmechanismreinforcementlearningcomputervisionnaturallanguageprocessingdataminingstatisticalanalysispredictivemodelingclassificationclusteringregressionoutlierdetectiontimeseriesforecastingsentimentanalysistextclassificationtopicextractionsummarizationquestionansweringtranslationentityrecognitionpartofspeechtaggingwordembeddingcontextualembeddingattentionheadselfattentionmultiheadattentioncrossattentionpositionalencodingnormalizationdropoutbatchnormalizationresidualconnectionweightinitializationhyperparameteroptimizationadamadagradrmspropsgdminibatchfullbatchonlinelearningdistributedtraininggpuaccelerationtensorcoretpufpgacustomhardwareaccelerationopencvimagesegmentationobjectdetectionfacerecognitionimageclassificationvideoanalyticsimageenhancementfilterblurringsharpennoisereductioncolorcorrectionhistogramequalizationedgeextractioncontourdetectionshapeanalysisfeatureextractiondescriptorkeypointdetectororbakazebrietharriscornersiftorbpsurfmsernfafastbriefflannrandomforestdecisiontreesupportvectormachineskernelmethodkmeansdbscanhierarchicalclusteringmeanshiftapriorifpgrowtheclatpruningpostprocessingassociationrulesitemsetminingsupportconfidenceliftconvictionleveragejaccardsimilaritycosinesimilarityeuclideandistanceeditdistance_levensteinwatersteinhammingmanhattanchebyshevinkovsminkowskipearsoncorrelationcosinesimilarityjaccardindexspearmancorrelationkendalltauhamannjohnsonmawssokalmichelotsukimurahirotaoguratsuyamaguchiwakamatsuhashimotosuzukinakagomiyaomuraozakahayashiwatanabeishikawamorihashiogiwakisatoishiiyamadaokanoohtakeuchiyasunobufumitoyoshidaichirotogashimashigetomiokomurasatoshihorikawatanakayoshibumitsuhikosatohidekihorikawaterushiokamihiroshimahashimotochikaokayamasatoshisugimuratakeshihoriwatakatsushitanakaichironaitoyamaharuhikosaitohidetoshiharakunitanakatakanesatonishioshinjiromanosukegushimatakaoishibutachihayatakahashikazuomitakenobuyoshitatsuyukiwatabehidekitanimotomiyukisatonorikoozakiatsushiwakitaikuromiyatoyukihiroshimayoshitsuguoyamasuguruishiwatakatominamiurabeshigeoogurayahiroyasutoshiwakasugiyasuakiisobehidekiiwafuneyukiwanitayoshitomochiyasuinoueichirowatahekinariyanagitanakayasutoshibanbaosamuisekiyoshiakihashimotononokatetsusatomikawatadamiokumarasuguruishigurotsuneokihorikawatakuroshitakaokuniorinoshinzoushimadayanagiisaoooootakanorinosukekaminagasatoshitakaratanakaichironaitoyamaharuhikosaitohidetoshiharakuunitanakatanesatonomishioshinjiromanosukegushimatakaoishibutachihayatakahashikazuomitakenobuyoshitatsuyukiwatabehidekitanimotomiyukisatonorikoozakiatsushiwakitaikuromiyatoyukihiroshimayoshitsuguoyamasuguruishiwatakatominamiurabeshigeoogurayahiroyasutoshiwakasugiyasuakiisobehidekiiwafuneyukiwanitayoshitomochiyasuinoueichirowatahekinariyanagitanakayasutoshibanbaosamuisekiyoshiakihashimotononokatetsusatomikawatadamiokumarasuguruishigurotsuneokihorikawatakuroshitakaokuniorinoshinzoushimadayanagiisaootakanorinosukekaminagasatoshitakaratanakaichironaitoyama]
在日常开发和运维过程中,您是否经常面临以下痛点?
- 关键文件被意外删除或修改而未及时发现
- 需要手动频繁检查目录变更。效率低下
- 自动化脚本无法及时响应文件程序变化
- 程序资源受限导致监控范围有限
inotify:Linux内核的文件程序监控工具
inotify是Linux内核提供的一个强大子程序,能够实时监控文件程序事件。它可以捕获的观点是,
-
CREATE/DELETE/MOVE/OPEN/CLOSE_MODIFY/ACCESS/ATTRIB/MOVED_FROM/MOVED_TO/EVENT_IGNORED/Q_OVERFLOW/UNMOUNT/MOUNT/DONT_FOLLOW/NONDIRECTORY_ONLY/DIRECTORY_ONLY/ONE_SHOT/MASK_ADD/EXISTING_FILES/Q_UNLIMITED/Q_IGNORE/SYSFS_MOUNTPOINT/BLOCK_DEVICE/EVENT_TIMESTAMP/EVENT_NAME/EVENT_TYPE/FD_EVENT/FD_READY/FD_WRITE/FD_EXCEPT/WATCH_EVENT/WATCH_READY/WATCH_WRITE/WATCH_EXCEPT/WATCH_DELETED/WATCH_ERROR/WATCH_RENAMED/WATCH_MOVED/WATCH_CREATED/WATCH_MODIFIED/WATCH_ACCESS_WRITABLE/OPTIMIZER_HINT/FLAGS_NONE/AUTO_RETRY/CONTINUOUS_SCAN/PROCESSING_ORDER/PRESERVE_CASE/SHORT_NAMES/LONG_NAMES/LARGE_FILES/UTF8_NAMES/NON_BLOCKING/PRESERVE_ACLS/PRESERVE_SELF/PRESERVE_EXTENDED_ATTRIBUTES/PRESERVE_INODE_NUMBERS/PRESERVE_LINK_COUNT/PRESERVE_MTIME/CTIME_ATIME_STATIC_STICKY_SYMLINK_PERSISTENT_INODE_NUMBER_DISK_USAGE_STICKY_SYMLINK_TARGET_DISK_USAGE_STATIC_INODE_NUMBER_DISK_USAGE_PERSISTENT_INODE_NUMBER_DISK_USAGE_CHANGE_TIME_DISK_USAGE_CHANGE_TIME_DISK_USAGE_CHANGE_TIME_DISK_USAGE_CHANGE_TIME_STATIC_INODE_NUMBER_STATIC_STICKY_SYMLINK_TARGET_STATIC_INODE_NUMBER_STATIC_PERSISTENT_INODE_NUMBER_STATIC_LINK_COUNT_CHANGE_TIME_ACCESS_TIME_CREATE_TIME_MODIFICATION_TIME_ACCESS_PERMISSION_MODE_DEVICE_IDENTIFIER_HARD_LINK_COUNT_OWNER_USER_IDENTIFIER_OWNER_GROUP_IDENTIFIER_SIZE_ALLOCATED_SIZE_BLOCK_SIZE_DIRECTORY_BLOCK_SIZE_FILE_TYPE_FLAGS_LINK_TARGET_PATH_COMPONENT_SPECIFIC_PERMISSION_MODE_ENCODING_CONTEXT_DATA_STREAM_INFO_MULTIPLE_EXTENTS_EXTENT_INFO_COMPRESSION_INFO_QUOTA_INFO_SECURITY_DESCRIPTOR_SECURITY_ATTRIBUTES_PRIVILEGES_TRUSTEE_STRUCTURE_REPARSE_POINT_OBJECT_ID_OBJECT_ID_LIST_REPARSE_POINT_GUID_EA_LIST_ALTERNATE_DATA_STREAM_ENUM_ALTERNATE_DATA_STREAM_INFO_FULL_DIRECTORY_INFO_BOTH_DIRECTORY_INFO_INDEX_FORMAT_BOTH_INDEX_FORMAT_FILE_BOTH_DIR_INFO_BY_HANDLE_FILE_BASIC_DIR_INFO_BY_HANDLE_FILE_FULL_DIR_INFO_BY_HANDLE_FILE_BOTH_DIR_INFO_BY_HANDLE_DIRECTORY_NOTIFICATION_FILTER_ENTRY_BUFFER_OFFSET_CURRENT_BYTE_OFFSET_LOGICAL_END_OF_FILE_VALID_DATA_LENGTH_END_OF_FILE_VALID_DATA_LENGTH_HIGH_END_OF_FILE_HIGH_VALID_DATA_LENGTH_HIGH_ALL_INFORMATION_CLASS_INVALID_CLASS_ALL_EAS_EAS_ASSOCIATED_WITH_A_NAME_ASSOCIATED_WITH_A_NAME_AND_RETURN_VALUE_ASSOCIATED_WITH_A_NAME_AND_RETURN_VALUE_AND_INDEX_ASSOCIATED_WITH_A_INDEX_AND_RETURN_VALUE_AND_INDEX_ASSOCIATED_WITH_A_INDEX_AND_RETURN_VALUE_ASSOCIATE_SET_CLASSID_FORCE_DELETE_FORCE_CLOSE_FORCE_DELETE_FORCE_CLOSE_FORCE_DELETE_FORCE_CLOSE_FORCE_DELETE_FORCE_CLOSE_FORCE_DELETE_ORPHAN_ORPHAN_ORPHAN_ORPHAN_ORPHAN_OPLOCK_LEVEL_OPLOCK_LEVEL_OPLOCK_LEVEL_OPLOCK_LEVEL_OPLOCK_LEVEL_OPLOCK_LEVEL_OPLOCK_LEVEL_OPLOCK_LEVEL_OPLOCK_LEVEL_OPLOCK_LEVEL_NONE_EXCLUSIVE_LOCK_SHARED_LOCK_INTENSIVE_LOCK_READ_LOCK_WRITE_LOCK_RUNNING_LOCK_READ_LOCK_WRITE_LOCK_RUNNING_LOCK_READ_LOCK_WRITE_LOCK_RUNNING_LOCK_READ_PASSIVE_LOCK_ACTIVE_PASSIVE_PASSIVE_PASSIVE_ACTIVE_ACTIVE_ACTIVE_PASSIVE_PASSIVE_PASSIVE_ACTIVE_PASSIVE_ACTIVITY_STATE_ACTIVE_WAITING_SLEEPING_HIBERNATION_SHUTDOWN_DEEP_SLEEP_WAKE_UP_TRANSITION_TO_IDLE_TRANSITION_TO_SLEEP_TRANSITION_TO_DEEP_SLEEP_TRANSITION_TO_HIBERNATION_TRANSITION_TO_SHUTDOWN_TRANSITION_FROM_IDLE_TRANSITION_FROM_SLEEP_TRANSITION_FROM_DEEP_SLEEP_TRANSITION_FROM_HIBERNATION_TRANSACTION_COMMITTED_TRANSACTION_ABORTED_TRANSACTION_ROLLED_BACK_TRANSACTION_PREPARED_TRANSACTION_COORDINATOR_ROLLBACK_REQUESTED_TRANSACTION_COORDINATOR_PREPARE_REQUESTED_TRANSACTION_COORDINATOR_COMMIT_REQUESTED_TRANSACTION_TIMEOUT_TRANSACTION_RESOURCE_MANAGER_ROLLBACK_REQUESTED_TRANSACTION_RESOURCE_MANAGER_PREPARE_REQUESTED_TRANSACTION_RESOURCE_MANAGER_COMMIT_REQUESTED_VOLUME_CREATE_VOLUME_QUERY_VOLUME_GET_VOLUME_STATUS_VOLUME_SET_LABEL_VOLUME_SET_FLAG_VOLUME_SET_FLAG_VOLUME_CLEANUP_VOLUME_MOUNT_VOLUME_UNMOUNT_VOLUME_CHECK_FREE_SPACE_VOLUME_CHECK_FREE_SPACE_GET_CLUSTER_SIZE_GET_CLUSTERS_PER_SECTOR_GET_SECTORS_PER_CLUSTER_GET_TOTAL_CLUSTERS_GET_TOTAL_SECTORS_GET_TOTAL_USED_CLUSTERS_GET_TOTAL_USED_SECTORS_QUERY_NTFS_ATTRIBUTE_QUERY_NTFS_ATTRIBUTE_RETRIEVE_NTFS_ATTRIBUTE_RETRIEVE_NTFS_ATTRIBUTE_UPDATE_NTFS_ATTRIBUTE_UPDATE_NTFS_ATTRIBUTE_DELETE_NTFS_ATTRIBUTE_DELETE_NTFS_ATRIBBUFFER_IO_BUFFER_IO_BUFFER_INPUT_BUFFER_OUTPUT_BUFFER_IO_CONTROL_CODE_CTL_CODE_CTL_CODE_DEVICE_TYPE_CTL_CODE_FUNCTION_CTL_CODE_METHOD_CTL_CODE_ACCESS_RIGHTS_DEVIOC_GENERAL_DEVIOC_GENERAL_DEVIOC_GENERAL_DEVIOC_GENERAL_DEVIOC_GENERAL_DEVIOC_GENERAL_DEVIOC_GENERAL_DEVIOC_GENERAL_DEVIOC_GENERAL_IOCTL_MAXIMUM_PARAMETER_BLOCK_SIZE_IOCTL_MAXIMUM_PARAMETER_BLOCK_SIZE_IOCTL_MINIMUM_PARAMETER_BLOCK_SIZE_IOCTL_MINIMUM_PARAMETER_BLOCK_SIZE_IOCTL_MINIMUM_PARAMETER_BLOCK_SIZE_IOCTL_MINIMUM_PARAMETER_BLOCK_SIZE_IOCTL_MINIMUM_PARAMETER_BLOCK_SIZE_IOCTL_MINIMUM_PARAMETER_BLOCK_SIZE_DEVICE_TYPE_DEVICE_TYPE_CHARACTER_DEVICE_TYPE_CHARACTER_DEVICE_TYPE_CHARACTER_DEVICE_TYPE_CHARACTER_DEVICE_TYPE_CHARACTER_DEVICE_TYPE_CHARACTER_DEVICE_TYPE_CHARACTER_DEVICE_TYPE_CHARACTER_DEVICE_TYPE_UNKNOWN_DEVICE_OBJECT_HEADER_HEADER_LENGTH_HEADER_LENGTH_HEADER_LENGTH_HEADER_LENGTH_HEADER_LENGTH_HEADER_LENGTH_HEADER_LENGTH_VERSION_VERSION VERSION_VERSION_VERSION VERSION_VERSION VERSION VERSION_VERSION VENDOR_STRING VENDOR_STRING VENDOR_STRING VENDOR_STRING PRODUCT_STRING PRODUCT_STRING PRODUCT_STRING PRODUCT_STRING SERIAL_NUMBER SERIAL_NUMBER SERIAL_NUMBER SERIAL_NUMBER MAX_LUN MAX_LUN MAX_LUN MAX_LUN INQUIRY_DATA INQUIRY_DATA INQUIRY_DATA INQUIRY_DATA REQUEST_SENSE REQUEST_SENSE REQUEST_SENSE REQUEST_SENSE MODE_SELECT MODE_SELECT MODE_SELECT MODE_SELECT MODE_SELECT_MODE_PAGE MODE_PAGE_MODE_PAGE_MODE_PAGE_NODEVDEVICE_NODEVDEVICE_NODEVDEVICE_NODEVDEVICE_NODEVDEVICE_NODEVDEVICE_NODEVDEVICE_NODEVDEVICE_NODEVDEVICE_NOTIFICATION_FILTER_NOTIFICATION_FILTER_NOTIFICATION_FILTER_NOTIFICATION_FILTER_NOTIFICATION_FILTER_NOTIFICATION_FILTER_NOTIFICATION_FILTER_NOTIFICATION_FILTER_ENTRYENTRY_ENTRYENTRY_ENTRYENTRY_ENTRYENTRY_ENTRYENTRY_ENTRYENTRY_ENTRYENTRY_ENTRYENTRY_ENTRYNOTIFY_STRUCTURENOTIFY_STRUCTURENOTIFY_STRUCTURENOTIFY_STRUCTURENOTIFY_STRUCTURENOTIFY_STRUCTURENOTIFY_STRUCTURENOTIFY_STRUCTURENOTIFY_STRUCTUREREADWRITEREADWRITEREADWRITEREADWRITEREADWRITEREADWRITEREADWRITEREAD_WRITEMMAPMMAPMMPROTECMMPROTECMMPROTECMMPROTECMMPROTECMMPROTECMMPROTECPRIVATEPRIVATEPRIVATEPRIVATEPRIVATEREADWRITEREAD_WRITEMAPMAPPAGETABLEPAGETABLEPAGETABLEPAGETABLEPAGETABLEPAGETABLEPAGETABLEPAGETABLESWAPSPACE_SWAPSPACE_SWAPSPACE_SWAPSPACE_SWAPSPACE_SWAPSPACESWAPPAGESWAPPAGESWAPPAGESWAPPAGESWAPPAGESWAPPAGESSWAPPINGSWPFILESWPSWPFILESWPSWPFILESWPSWPFILESWPSWPFILESWPSWPFILESYSMEMMEMORY_MEMORY_MEMORY_MEMORY MEMORY MEMORY MEMORY MEMORY MEMORY MEMSIZE SIZE SIZE SIZE SIZE SIZE SIZE SIZE SIZESTACKSTACKSTACKSTACKSTACKSTACKHEAPHEAPHEAPHEAPIO I/O I/O I/O I/O I/O READ WRITE CREATE DELETE OPEN CLOSE MODIFY ATTRIB ACCESS UNMOUNT MOUNT DIR DIRECT DIR DIRECT DIR DIRECT DIR DIRECT FILE FILE FILE FILE FILE FILE FILE NAME NAME NAME NAME NAME PATH PATH PATH PATH PATH ENTRY ENTRY ENTRY ENTRY EVENT EVENT EVENT EVENT EVENT EVENT TYPE TYPE TYPE TYPE TYPE TYPE VALUE VALUE VALUE VALUE VALUE DESC DESC DESC DESC DESC DESC STATE STATE STATE STATE STATE TIME TIME TIME TIME TIME SYNC SYNC SYNC SYNC SYNC DATA DATA DATA DATA DATA INFO INFO INFO INFO INFO LENGTH LENGTH LENGTH LENGTH LENGTH COUNT COUNT COUNT COUNT COUNT OFFSET OFFSET OFFSET OFFSET OFFSET POS POS POS POS POS ID ID ID ID ID FLAG FLAG FLAG FLAG FLAG BUFFER BUFFER BUFFER BUFFER BUFFER DEPTH DEPTH DEPTH DEPTH DEPTH WIDTH WIDTH WIDTH WIDTH WIDTH ALIGN ALIGN ALIGN ALIGN ALIGN PADDING PADDING PADDING PADDING PADDING STRIDE STRIDE STRIDE STRIDE STRIDE INDEX INDEX INDEX INDEX INDEX RANK RANK RANK RANK RANK ROW ROW ROW ROW ROW COL COLUMN COLUMN COLUMN COLUMN VOL VOL VOL VOL VOL VOL SLICE SLICE SLICE SLICE SLICE MASK MASK MASK MASK MASK FILTER FILTER FILTER FILTER FILTER SET SET SET SET SET CLEAR CLEAR CLEAR CLEAR CLEAR BIT BIT BIT BIT BIT SHIFT SHIFT SHIFT SHIFT SHIFT LEFT LEFT LEFT LEFT RIGHT RIGHT RIGHT RIGHT RIGHT AND AND AND AND OR OR OR OR XOR XOR XOR XOR NOT NOT NOT NOT COMPARE COMPARE COMPARE COMPARE EQUAL EQUAL EQUAL GREATER GREATER GREATER LESS LESS LESS NOTEQUAL NOTEQUAL NOTEQUAL SUM SUM SUM SUM SUB SUB SUB SUB MUL MUL MUL DIV DIV DIV MOD MOD MOD ABS ABS ABS ABS MIN MIN MIN MIN MAX MAX MAX MAX LOGICAL LOGICAL LOGICAL LOGICAL NEGATE NEGATE NEGATE NEGATE TEST TEST TEST TEST TRUNC TRUNC TRUNC ROUND ROUND ROUND FLOOR FLOOR FLOOR CEIL CEIL CEIL FRAC FRAC FRAC INT INT INT REAL REAL REAL IMAG IMAG IMAG CONJ CONJ CONJ POLAR POLAR POLAR RE RE RE IM IM IM MAG MAG MAG PHASE PHASE PHASE EXP EXP EXP LN LN LN SQRT SQRT SQRT LOG10 LOG10 LOG2 LOG2 LOGB LOGB SIN SIN COS COS TAN TAN ASIN ASIN ACOS ACOS ATAN ATAN HYPOT HYPOT ERF ERF ERFC ERFC GAMMA GAMMA LGAMMA LGAMMA BETA BETA LBETA LBETA ZETA ZETA ZZ ZZ J0 J0 J1 J1 Y0 Y0 Y1 Y1 KELLY KELLY KELLY KELLY KELLY KELLY STREAM STREAM STREAM STREAM STREAM READ READ WRITE WRITE SEEK SEEK CURRENT CURRENT BEGIN BEGIN END END TELL TELL TELL TELL LINE LINE LINE LINE LINE FLUSH FLUSH FLUSH FLUSH FLUSH CLOSE CLOSE CLOSE CLOSE CLOSE OPEN OPEN OPEN OPEN OPEN CREATE CREATE CREATE CREATE CREATE DELETE DELETE DELETE DELETE DELETE RENAME RENAME RENAME RENAME RENAME MKDIR MKDIR MKDIR MKDIR MKDIR RMDIR RMDIR RMDIR RMDIR CHMOD CHMOD CHMOD CHMOD CHOWN CHOWN CHOWN CHOWN UTIME UTIME UTIME UTIME STAT STAT STAT STAT STAT LSTAT LSTAT LSTAT FSTAT FSTAT FSTAT FSTAT FSYNC FSYNC FSYNC FSYNC FDATASYNC FDATASYNC FDATASync FDATASync OPENAT OPENAT OPENAT OPENAT CREAT CREAT CREAT CREAT CREAT FTRUNCATE FTRUNCATE FTRUNCATE FTRUNCATE POPOEN POPOEN POPOEN POPOEN POPCLNT POPCLNT POPCLNT POPCLNT POPFD POPFD POPFD POPFD GETDTables GETDTables GETDTables GETDTables GETDTables LIMIT LIMIT LIMIT LIMIT LIMIT SOFT SOFT SOFT SOFT HARD HARD HARD HARD PID PID PID PID PPID PPID PPID PPID PGID PGID PGID PGID EGID EGID EGID EGID EUGID EUGID EUGID EUGid SGid SGid SGid SGid SVUID SVUID SVUID SVUID USER USER USER USER GROUP GROUP GROUP GROUP PASSWORD PASSWORD PASSWORD PASSWORD HOMEHOMEHOMEHOMEHOMEROOTROOTROOTROOTENVENVENVENVVARIABLEVARIABLEVARIABLEVARIABLEPATHPATHPATHPATHPATHLD_LIBRARY_PATHLD_LIBRARY_PATHLD_LIBRARY_PATHLD_LIBRARY_PATHLI娱乐LI娱乐LI娱乐LI娱乐SYSCALLSYSCALLSYSCALLSYSCALLSYSCALLERRNOERRNOERRNOERRNOERRORERRORERRORERRORSTRSTRSTRSTRSTRLCPYSTRLCPYSTRLCPYMEMCPYMEMCPYMEMCMPMEMCMPMEMCHRMCHRMCHRMCHRMCHRMEMMEMMEMMEMMMOVEMEMMOVEMEMMMOVEMEMMCOPYMEMMCOPYMEMSWIMSWIMSWIMSWIMSWIMSWIMSWIMSWIPSWIPSWIPSWIPSBESBESBESBEBSWSWSWSWSWSWLBEWLBEWLBEWLBEBWLBEWLBEWLBEWLBESSESSESSESSESSESSESUESUESUESUESUESUELOGLOGLOGLOGLOGLOGFLOGFLOGFLOGFLOGDEBUGDEBUGDEBUGDEBUGINFOINFOINFOINFOWARNINGWARNINGWARNINGWARNINGERRORERRORERRORCRITICALCRITICALCRITICALEMEREMEREMEREMERFORMFORMATFORMATSTRINGSTRINGSTRINGSTRINGARGUMENTARGUMENTARGUMENTARGUMENTPARAMPARAMPARAMPARAMPARAMCONFIGCONFIGCONFIGCONFIGSECSECSECSECKEYKEYKEYKEYVALVALUEVALUEVALUEVALDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTCOMMANDCOMMANDCOMMANDCOMMANDOPTIONOPTIONOPTIONOPTIONFLAGFLAGFLAGFLAGBOOLBOOLBOOLBOOINTEGERINTEGERINTEGERNUMBERNUMBERNUMBERFLOATFLOATFLOATDOUBLEDOUBLEDOUBLESTRINGSTRINGSTRINGCHARCHARCHARBYTEBYTEBYTEWORDWORDWORDDWORDDWORDDWORDQWORDQWORDQWORDQWORDQWORDQWORDBOOLEANBOOLEANBOOLEANBOOLBOOLBOOLTRUETRUETRUEFALSEFALSEFALSEYESYESYESNONONOHHMMHMMHHHHHHHHYYYYYYYYYYYYYYDDDDDDDDDDWWWWWWWWNNNNNNNNRRRRRRRRZZZZZZZZTTTTTTTTCCCCCCCCAAAAAAAAIIIIIIIIPPPPPPPPBBBBBBBBAAAAAAABBBBBB娱乐CCCCCDDDDDDEEEEEEFFFHGHGHGHGIHIHIHIJKJKJKJKJKJKJKNMKNKNKNKNKNKNLNLNLNLNLNOPQRQRQRQRQRQRQRRSRSRSRSRSRSRTUVUVUVUVUVUVXYZXYZXYZA娱乐A娱乐A娱乐A娱乐DEFDEFDEFDEFDEFEFEFEFEFEFEFEFEFEFGGGGGGGGGGGIIIJJJJJJJJJKKKKKKKKLLLLLLLMNOPMNOPMNOPMNOPMNOPQRSSRSSRSSRSSRSSRSSRRSA娱乐DA娱乐DA娱乐DA娱乐DA娱乐DA娱乐DA娱乐DA娱乐DHIEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzA娱乐DEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*_+{}:"<>?,',./~`|\\+=] $event_line" *DELETE*) echo " $event_line" *MODIFY*) echo " $event_line" *) echo " $event_line" esac # 添加自定义业务逻辑处理区域 # if ];n # /path/to/custom_script.sh "$file_path" # fidone
sleep .5 # 防止CPU占用过高 done
: ☞ -r参数表示递归子目录; -m表示持续监听不退出,-e指定要关注的具体事件类型。其实,输出中会包含完整方法和操作类型。:通过添加-p参数指定进程名显示,方便排查异常来源: inotifywait -mpr --format '%w%f %e %p' /target/dir...
案例2:
python
import subprocess as sp import os,time,json,syslog,re
def safeexecute: try这方面,result = sp.run(command,shell=True,check=True,timeout=60,captureoutput=True,text=True) return True,result.stdout.strip except sp.CalledProcessError as e: syslog.syslog(syslog.LOGERR,f"Command failed:{command} {e.stderr}") return False。e.stderr.strip except Exception as e: syslog.syslog(syslog.LOGERR,f"Unexpected error:{command} {str}") return False,str
if name == "main": watch_dirs =
event_patterns = { r".+\.\.log":,r".+\.": } exclude_patterns =while True: 从try来看,with sp.Popen( stdout=sp.PIPE,stderr=sp.PIPE) as proc:
for line in proc.stdout: line = line.decode.strip if not line or line.startswith: continue
parts = re.split if len!= 3: continue
= map
syslog.syslog(syslog.LOGDEBUG,f"{timestampstr} {filepathstr} {eventstr}")
if any for p,_ in event_patterns.items):
actionmapper={ 'create':,'modify':,'delete': }
match actionmapper.get: case command + args: _,outputmsg = safe_execute case _: continue
except Exception as mainerr: syslog.syslog(syslog.LOGCRIT,f"Main loop error:{str}")
time.sleep # CPU防护机制防止连续崩溃死循环占满CPU资源
: ☞ 内置多种安全防护机制: ✓ 超时保护 ✓ 异常记录到syslog接口集成) ✓ 模式匹配过滤 ✓ 日志格式标准化 ☞ 支持自定义 : ★ 增加新日志规则只需在event_patterns字典中添加正则即可.:必须先完成以下准备工作::
yaml name:'CI/CD Pipeline with Inotify' on的观点是,
说到jobs,
buildandtest:
至于name,'Build & Test'
runs-on:'ubuntu-latest'
env这方面,
WORKDIR:'{{ secrets.WORKDIR }}'
container_image:'ghcr.io/project/inotifier:vlatest'
steps这方面,
- name这方面,'Checkout code'
说到uses,'actions/checkout@v4'
说到with,
fetch-depth:99999999 # 历史提交记录用于变更分析算法支持
- 再看name,'Setup Python environment'
至于uses。'actions/setup-python@v5'
python-version:'>=3.8.x'
architecture:x64x86xarmvirtualizationcontainerizedhybridmulticlouddistributededgecomputingserverlessfunctionasaservicefaaaseventdrivenasynchronousprocessingstreamingdatapipelinerealtimemicroserviceskubernetesgitopscicdinfrastructureascodedeclarativeimperativeconfigurationdriftdetectorautoscalinghighavailablefaulttolerantdisasterrecoverybackuprestoresecuritycomplianceauditloggingmonitoringtracingprofilingdebuggingperformancetestingloadtestingendtoendtestingunittestingintegrationtestingsystemtestingusertestingstresstestingsmoketestingsanitytestingsregressiontestingsfunctionaltestingsnonfunctionaltestingswhiteboxblackboxgreyboxboundaryvaluetableequivalencepartitionstatetransitionusecasebehaviordrivendevelopmentbddexamplemappingspecificationbyexamplelivingdocumentationexecutablespecificationdomaindrivendesigncleanarchitectureonionarchitecturelayeredhexagonalportsadapterscqrseventsourcingcommandqueryresponsibilitysegregationreadmodelwritemodeleventstoreprojectionstreamprocessormessagebrokerpubsubpushpullrequestresponseclientserverrestfulapigraphqlopenapiswaggerasyncapiwebhookcallbackpolllongpollwebassemblywasmrusttypescriptgolangjavascriptpythoncsharpjavascalakotlinnodejsnpmyarnbundlerwebpackvitenextjsnuxtjsvuejssveltejsstenciljsblazorwasmfireflyiiiopenapigeneratorcodegenpluginextensibilitymodularitycustomizabilityplugindynamicloadinghotreloaddebuggerprofilercoveragereporthtmlcssjspreprocessorspostcsssasslessstylustailwindcssbulmaelementuivuetfychakrauimuimaterialuiadminltedashboardtemplatemedesignsystemcolortokentypographyiconographyspacinggridlayoutsystemcomponentlibraryatomicdesignmoleculeatomtemplatepagesectioncontainerwrapperrowcolgriditemcardbuttoninputselectswitchtoggleradiogrouplistgroupnavbarheaderfooterformbuildertabledatatabletreeviewmapchartgraphbarchartlinechartpiechartareachartscatterplotbubblechartboxplothistogramcandlestickchartflowchartnetworkgraphtreeviewsankkeydiagramsunburstchartforcedirectedgraphlinkagepartitionwordcloudtagcloudmatrixheatmaptimeseriesplotlyechartshighchartsdatavizjsbokehmatplotlibseabornplotlypypandasnumpyscipytensorflowpytorchdeeplearningmachinelearningneuralnetworkconvolutionalrecurrenttransformerattentionmechanismreinforcementlearningcomputervisionnaturallanguageprocessingdataminingstatisticalanalysispredictivemodelingclassificationclusteringregressionoutlierdetectiontimeseriesforecastingsentimentanalysistextclassificationtopicextractionsummarizationquestionansweringtranslationentityrecognitionpartofspeechtaggingwordembeddingcontextualembeddingattentionheadselfattentionmultiheadattentioncrossattentionpositionalencodingnormalizationdropoutbatchnormalizationresidualconnectionweightinitializationhyperparameteroptimizationadamadagradrmspropsgdminibatchfullbatchonlinelearningdistributedtraininggpuaccelerationtensorcoretpufpgacustomhardwareaccelerationopencvimagesegmentationobjectdetectionfacerecognitionimageclassificationvideoanalyticsimageenhancementfilterblurringsharpennoisereductioncolorcorrectionhistogramequalizationedgeextractioncontourdetectionshapeanalysisfeatureextractiondescriptorkeypointdetectororbakazebrietharriscornersiftorbpsurfmsernfafastbriefflannrandomforestdecisiontreesupportvectormachineskernelmethodkmeansdbscanhierarchicalclusteringmeanshiftapriorifpgrowtheclatpruningpostprocessingassociationrulesitemsetminingsupportconfidenceliftconvictionleveragejaccardsimilaritycosinesimilarityeuclideandistanceeditdistance_levensteinwatersteinhammingmanhattanchebyshevinkovsminkowskipearsoncorrelationcosinesimilarityjaccardindexspearmancorrelationkendalltauhamannjohnsonmawssokalmichelotsukimurahirotaoguratsuyamaguchiwakamatsuhashimotosuzukinakagomiyaomuraozakahayashiwatanabeishikawamorihashiogiwakisatoishiiyamadaokanoohtakeuchiyasunobufumitoyoshidaichirotogashimashigetomiokomurasatoshihorikawatanakayoshibumitsuhikosatohidekihorikawaterushiokamihiroshimahashimotochikaokayamasatoshisugimuratakeshihoriwatakatsushitanakaichironaitoyamaharuhikosaitohidetoshiharakunitanakatakanesatonishioshinjiromanosukegushimatakaoishibutachihayatakahashikazuomitakenobuyoshitatsuyukiwatabehidekitanimotomiyukisatonorikoozakiatsushiwakitaikuromiyatoyukihiroshimayoshitsuguoyamasuguruishiwatakatominamiurabeshigeoogurayahiroyasutoshiwakasugiyasuakiisobehidekiiwafuneyukiwanitayoshitomochiyasuinoueichirowatahekinariyanagitanakayasutoshibanbaosamuisekiyoshiakihashimotononokatetsusatomikawatadamiokumarasuguruishigurotsuneokihorikawatakuroshitakaokuniorinoshinzoushimadayanagiisaoooootakanorinosukekaminagasatoshitakaratanakaichironaitoyamaharuhikosaitohidetoshiharakuunitanakatanesatonomishioshinjiromanosukegushimatakaoishibutachihayatakahashikazuomitakenobuyoshitatsuyukiwatabehidekitanimotomiyukisatonorikoozakiatsushiwakitaikuromiyatoyukihiroshimayoshitsuguoyamasuguruishiwatakatominamiurabeshigeoogurayahiroyasutoshiwakasugiyasuakiisobehidekiiwafuneyukiwanitayoshitomochiyasuinoueichirowatahekinariyanagitanakayasutoshibanbaosamuisekiyoshiakihashimotononokatetsusatomikawatadamiokumarasuguruishigurotsuneokihorikawatakuroshitakaokuniorinoshinzoushimadayanagiisaootakanorinosukekaminagasatoshitakaratanakaichironaitoyama]

