首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
182 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
28
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
786
篇与
的结果
2023-06-21
mysql常见问题
暂无简介
2023年06月21日
12 阅读
0 评论
0 点赞
2023-06-07
rsync+inotify实现服务器日志数据同步
非root账号准备创建账号并设置为非root用户授权目录useradd admin passwd admin #输入两次密码 chown -R admin /backup/服务端(源服务器所同步数据到的目标服务器)准备关闭防火墙和selinuxsystemctl disable --now firewalld setenforce 0 sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/sysconfig/selinux getenforce安装yum -y install rsync rsync-daemon卸载rpm -qa | grep rsync yum erase rsync -y查看版本号rsync -version重启netstat -anput | grep :873 kill -9 1246297(删除进程号) systemctl restart rsyncd.service查看服务是否正常工作systemctl status rsyncd.service修改或创建两个配置文件vim /etc/rsyncd.confuid = admin ##进行备份的组,nobody为任意组 gid = admin ##端口 port = 873 ## 如果"use chroot"指定为true,那么rsync在传输文件以前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要以root权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true.但是一般不需要,选择no或false use chroot = yes read only = on ##不允许列清单 list = no ##最大连接数 max connections = 4 ##pid文件的存放位置 ##pidfile = /var/run/rsyncd.pid ##锁文件的存放位置 lock file=/var/run/rsyncd.lock ##日志文件的存放位置 log file = /var/log/rsyncd.log ## motd file = /etc/rsyncd.motd ## //此文件定义完成后系统会自动创建 exclude = lost+found/ transfer logging = yes ##覆盖客户指定的IP超时时间,也就是说rsync服务器不会永远等待一个崩溃的客户端。 timeout = 900 ignore nonreadable = yes ## //同步时跳过没有权限的目录 dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 ## //传输时不压缩的文件 ##哪些电脑可以访问rsync服务,这里可以指定单个IP,也可以指定整个网段,能提高安全性。格式是ip 与ip 之间、ip和网段之间、网段和网段之间要用空格隔开 ##hosts allow = 172.25.0.110 ##哪些电脑不可以访问rsync服务 ##hosts deny = 172.25.0.0/24 ##这里是认证模块名,即跟samba语法一样,是对外公布的名字 [backup] comment = this is module for backup ##这里是参与同步的目录 path = /backup/ ##可以忽略一些无关的IO错误 ignore errors ##允许可读可写 read only = no ##认证的用户名 auth users = admin ##密码文件存放地址 secrets file = /etc/rsyncd.passvim /etc/rsyncd.passadmin:123456修改配置文件权限chmod 600 /etc/rsync*创建同步目录,并设置目录权限mkdir /backup chmod 600 /backup启动rsync --daemon客户端(源服务器)准备关闭防火墙和selinuxsystemctl disable --now firewalld setenforce 0 getenforce安装(只需要安装,不要启动,不需要配置)yum install -y rsync创建认证密码文件echo '123456' > /etc/rsync.pass设置认证密码文件权限chmod 600 /etc/rsync.pass同步rsync -avz --port 873 --progress --delete /tmp/test admin@服务器ip::backup --password-file=/etc/rsync.passinotify准备查看服务器内核是否支持inotifyll /proc/sys/fs/inotify/安装inotify-tools工具yum -y install make gcc gcc-c++ yum -y install inotify-tools写同步脚本mkdir /scripts touch /scripts/inotify.sh chmod 755 /scripts/inotify.sh vim /scripts/inotify.sh inotify.sh 脚本如下 host=服务器的ip # 目标服务器的ip(备份服务器) src=/tmp/test # 在源服务器上所要监控的备份目录(此处可以自定义,但是要保证存在) des=backup # 自定义的模块名,需要与目标服务器上定义的同步名称一致 password=/etc/rsync.pass # 执行数据同步的密码文件 user=admin # 执行数据同步的用户名 inotifywait=/usr/bin/inotifywait $inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \ | while read files;do rsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host::$des echo "${files} was rsynced" >>/tmp/rsync.log 2>&1 done启动脚本nohup bash /scripts/inotify.sh &查看启动脚本ps -ef |grep inotify设置脚本开机自启动chmod +x /etc/rc.d/rc.local echo 'nohup /bin/bash /scripts/inotify.sh' >> /etc/rc.d/rc.localRsync服务备份常见报错信息配置项-a、--archive参数表示存档模式,保存所有的元数据,比如修改时间(modification time)、权限、所有者等,并且软链接也会同步过去。--append参数指定文件接着上次中断的地方,继续传输。--append-verify参数跟--append参数类似,但会对传输完成后的文件进行一次校验。如果校验失败,将重新发送整个文件。-b、--backup参数指定在删除或更新目标目录已经存在的文件时,将该文件更名后进行备份,默认行为是删除。更名规则是添加由--suffix参数指定的文件后缀名,默认是~。--backup-dir参数指定文件备份时存放的目录,比如--backup-dir=/path/to/backups。--bwlimit参数指定带宽限制,默认单位是 KB/s,比如--bwlimit=100。-c、--checksum参数改变rsync的校验方式。默认情况下,rsync 只检查文件的大小和最后修改日期是否发生变化,如果发生变化,就重新传输;使用这个参数以后,则通过判断文件内容的校验和,决定是否重新传输。--delete参数删除只存在于目标目录、不存在于源目标的文件,即保证目标目录是源目标的镜像。-e参数指定使用 SSH 协议传输数据。--exclude参数指定排除不进行同步的文件,比如--exclude="*.iso"。--exclude-from参数指定一个本地文件,里面是需要排除的文件模式,每个模式一行。--existing、--ignore-non-existing参数表示不同步目标目录中不存在的文件和目录。-h参数表示以人类可读的格式输出。-h、--help参数返回帮助信息。-i参数表示输出源目录与目标目录之间文件差异的详细情况。--ignore-existing参数表示只要该文件在目标目录中已经存在,就跳过去,不再同步这些文件。--include参数指定同步时要包括的文件,一般与--exclude结合使用。--link-dest参数指定增量备份的基准目录。-m参数指定不同步空目录。--max-size参数设置传输的最大文件的大小限制,比如不超过200KB(--max-size='200k')。--min-size参数设置传输的最小文件的大小限制,比如不小于10KB(--min-size=10k)。-n参数或--dry-run参数模拟将要执行的操作,而并不真的执行。配合-v参数使用,可以看到哪些内容会被同步过去。-P参数是--progress和--partial这两个参数的结合。--partial参数允许恢复中断的传输。不使用该参数时,rsync会删除传输到一半被打断的文件;使用该参数后,传输到一半的文件也会同步到目标目录,下次同步时再恢复中断的传输。一般需要与--append或--append-verify配合使用。--partial-dir参数指定将传输到一半的文件保存到一个临时目录,比如--partial-dir=.rsync-partial。一般需要与--append或--append-verify配合使用。--progress参数表示显示进展。-r参数表示递归,即包含子目录。--remove-source-files参数表示传输成功后,删除发送方的文件。--size-only参数表示只同步大小有变化的文件,不考虑文件修改时间的差异。--suffix参数指定文件名备份时,对文件名添加的后缀,默认是~。-u、--update参数表示同步时跳过目标目录中修改时间更新的文件,即不同步这些有更新的时间戳的文件。-v参数表示输出细节。-vv表示输出更详细的信息,-vvv表示输出最详细的信息。--version参数返回 rsync 的版本。-z参数指定同步时压缩数据。线上遇到的问题以及解决对比的文件太多,导致占用太多CPU,一个rsync进程占用服务器CPU的99%、100%,虽然服务器也很垃圾,但彻底废了,解决下这个问题优化思路如下,用了第二(排除不必要的文件)第三条(增量同步),以及限制同步频率(每小时同步一次)。要优化这个同步脚本以减少服务器CPU占用,您可以考虑以下几点:1.限制带宽和连接数:使用--bwlimit参数来限制rsync使用的带宽,以及--max-connections参数来限制rsync使用的最大连接数。这可以帮助减少对服务器资源的占用。2.排除不必要的文件:使用--exclude参数来排除不必要同步的文件或目录,这可以减少同步的数据量,从而减少服务器CPU占用。3.增量同步:考虑使用--checksum参数来进行增量同步,这将只传输发生变化的文件,而不是整个文件。4.调整压缩级别:根据需要调整压缩级别,较低的压缩级别可能会减少CPU占用。rsync -avzP --delete --timeout=100 --password-file=${password} --include='*/' --include="$(date +'%Y-%m-%d')*/**" --include="$(date -d 'yesterday' +'%Y-%m-%d')*/**" --include="$(date -d '2 days ago'm-%d')*/**" --exclude="*" --checksum $src $user@$host::$des--include="/$(date +'%Y-%m-%d')*/" --include="/$(date -d 'yesterday' +'%Y-%m-%d')/" --include="/$(date -d '2 days ago' +'%Y-%m-%d')/":包含当天、昨天和前天日期的文件夹。--exclude="*":排除其他日期的文件夹。--checksum:增量同步,使用文件的校验和进行比较,只传输发生变化的部分。--no-g:同步文件时不保留源文件的组(group)属性。--ignore-missing-args:当有多个rsync命令行的参数配置文件,并且其中一个文件缺少某些参数(某个文件夹缺少)时,使用--ignore-missing-args选项可以确保rsync继续执行而不中断。附完整的代码#!/bin/bash 脚本将会在检测到文件变化后同步推送日志文件 每同步一次需等待一段时间再同步。 host=xx.xx.xx.xx # 目标服务器的ip(备份服务器) src=/log/ # 在源服务器上所要监控的备份目录(此处可以自定义,但是要保证存在) des=xxxx # 自定义的模块名,需要与目标服务器上定义的同步名称一致 user=admin # 执行数据同步的用户名 inotifywait=/usr/bin/inotifywait # 设定同步时间间隔(秒) interval=3600 # 当前日期 current_date=$(date +'%Y-%m-%d') # 昨天的日期 yesterday_date=$(date -d 'yesterday' +'%Y-%m-%d') # 前天的日期 two_days_ago_date=$(date -d '2 days ago' +'%Y-%m-%d') $inotifywait -mrq --timefmt '[%Y%m%d %H:%M:%S]' --format '%T %w%f%e' -e modify,delete,create,attrib $src \ | while read files;do # 只对比同步当天、昨天和前天日期的文件夹 增量同步 rsync -azvP --port 9879 --timeout=600 --include='*/' --include="$current_date/**" --include="$yesterday_date/**" --include="$two_days_ago_date/**" --exclude='*' --no-g --checksum --ignore-missing-args $src $user@$host::$des echo "${files} was rsynced" >> /tmp/rsync.log 2>&1 # 等待一段时间后再同步 sleep $interval done上面的代码还有问题,发现当天文件夹推送可以之后就不行了,改成用定时任务吧。或者脚本改成while true do # 只对比同步当天、昨天和前天日期的文件夹 增量同步 rsync -azvP --port 9879 --timeout=600 --include='*/' --include="$current_date/**" --include="$yesterday_date/**" --include="$two_days_ago_date/**" --exclude='*' --no-g --checksum --ignore-missing-args $src $user@$host::$des echo "${files} was rsynced" >> /tmp/rsync.log 2>&1 # 等待一段时间后再同步 sleep $interval done补充https://blog.51cto.com/welcomeweb/2131116
2023年06月07日
30 阅读
0 评论
0 点赞
2023-06-05
图解数据结构
暂无简介
2023年06月05日
20 阅读
0 评论
0 点赞
2023-06-05
宝塔部署开源云盘Cloudreve
开放5212端口拉取源码mkdir /www/wwwroot/自建文件夹名 # 新建一个文件夹存放程序 cd /www/wwwroot/自建文件夹名 # 进入该文件夹 wget https://github.com/cloudreve/Cloudreve/releases/download/3.7.1/cloudreve_3.7.1_linux_amd64.tar.gz # 下载你复制的链接 tar -zxvf cloudreve_3.7.1_linux_amd64.tar.gz # 解压获取到的主程序 chmod +x ./自建文件夹名 # 赋予执行权限 ./cloudreve # 启动 Cloudreve访问:服务器ip:5212设置守护进程(如./cloudreve 窗口打开先关闭)重置云盘管理员密码cd /www/wwwroot/自建文件夹名 # 进入该文件夹 ./cloudreve --database-script ResetAdminPassword设置反向代理,用域名访问添加网站指向自建文件夹,并设置反向代理7.设置mysql数据库储存默认数据库是自带的SQLite,可改为mysql新建一个mysql数据库,在conf.ini文件里增加下面代码,然后重启守护进程[Database] ; 数据库类型,目前支持 sqlite | mysql Type = mysql ; 用户名 User = cloudreve ; 密码 Password = cloudreve ; 数据库地址 Host = 127.0.0.1 ; 数据库名称 Name = cloudreve ; 数据表前缀 TablePrefix = cd
2023年06月05日
16 阅读
0 评论
0 点赞
2023-06-05
php的错误机制
简单点说,是两大类四小级别错误类型1、编译错误编译时语法等错误,最容易解决。2、执行错误编译后,执行时阶段,根据报错级别来决定是否终止程序。其实还有一类不属于php的错误机制,是程序员认为的逻辑错误因为逻辑不清晰而产生的错误最难排查,执行成功,但最终的结果不是期望的。错误级别E_ERROR 致命错误,一旦发生就会中断程序的执行。 如连续两次使用相同名称来定义一个函数E_WRRING 警告错误,一旦发生并不会中断程序的执行。E_NOTICE 提示错误,一旦发生并不会中断程序的执行。E_PARSE 编译错误,一旦发生就会中断程序的执行。以上都可以说是系统错误,php还可以自定义错误自定义错误当您需要在运行脚本时的某个指定条件下自定义错误消息时,该函数很有用。如果指定了一个不合法的错误类型,该函数返回 FALSE,否则返回 TRUE。语法:trigger_error(error_message,error_types)参数:error_message必需。规定错误消息。长度限制为 1024 个字符。error_types可选。规定错误消息的错误类型。可能的错误类型:E_USER_ERROR - 用户生成的运行时的致命错误。不能恢复的错误。停止执行脚本。E_USER_WARNING - 用户生成的运行时的非致命警告。脚本没有停止执行。E_USER_NOTICE - 默认。用户生成的运行时的通知。脚本发现可能是一个错误,但也可能在脚本正常运行时发生。错误触发系统错误由php检查并触发自定义错误由函数触发错误机制好处是在记录错误,apache的log/error.log(trigger_error本质写入文件,fwrite())错误的控制可修改php.ini相关控制开关以及显示错误级别,具体百度了解
2023年06月05日
17 阅读
0 评论
0 点赞
1
...
156
157
158