首页
好物推荐
薅羊毛领红包
好看壁纸
更多
隐私政策
友情链接
时光机
搜索
1
使用 docker 快速安装 Home Assistant
6,181 阅读
2
Ipad mini2 降级到IOS10.3.3系统
4,305 阅读
3
Home Assistant集成OpenWrt
3,632 阅读
4
华为手机开启ADB进行WIFI远程调试
3,608 阅读
5
小米电视开机广告和乐播投屏广告Hosts屏蔽列表
3,403 阅读
无分类
智能家居
心得随想
文档教程
登录
Search
标签搜索
Linux
JS
教程
CSS
HTML
配置
NodeJS
Docker
解决方案
文档
Git
Java
技术培训
Hadoop
Mac
Windows
RiotJS
Python
VPS
Home Assistant
DONG HAO
累计撰写
154
篇文章
累计收到
59
条评论
首页
栏目
无分类
智能家居
心得随想
文档教程
页面
好物推荐
薅羊毛领红包
好看壁纸
隐私政策
友情链接
时光机
搜索到
46
篇与
Linux
的结果
2024-11-15
Deepin 系统自动挂载硬盘分区教程
在 Deepin 系统中,挂载硬盘分区可以让我们更方便地访问和管理不同的磁盘空间。本教程将详细介绍如何在 Deepin 系统中挂载 NTFS 格式的硬盘分区。查询 NTFS 磁盘的 UUID在终端中输入sudo blkid命令,可以查询出系统中所有磁盘的信息。例如:/dev/sda1: BLOCK_SIZE="512" UUID="1078726878724C8A" TYPE="ntfs" PARTUUID="9963e7bd-01"这里的 UUID(Universally Unique Identifier)是一个唯一标识符,用于区分不同的磁盘分区。在挂载硬盘分区时,我们需要使用这个 UUID 来指定要挂载的分区。编辑 /etc/fstab 文件打开终端,输入以下命令以使用文本编辑器打开 /etc/fstab 文件:sudo nano /etc/fstab在文件末尾添加以下内容:UUID=1078726878724C8A /data ntfs defaults 0 0这里的每一个参数都有特定的含义:UUID=1078726878724C8A:指定要挂载的磁盘分区的 UUID。这个 UUID 是在第一步中通过sudo blkid命令查询得到的。/data:挂载点,即磁盘分区在文件系统中的挂载位置。你可以根据自己的需求选择一个合适的挂载点,例如 /mnt/data、/media/data 等。ntfs:文件系统类型,表示要挂载的磁盘分区是 NTFS 格式。defaults:挂载选项,这里使用了默认选项。这些选项包括读写权限、文件系统检查等。具体的选项可以根据需要进行调整。0:是否备份,0 表示不备份。0:是否检查文件系统,0 表示不检查。挂载硬盘分区完成上述步骤后,保存并关闭 /etc/fstab 文件。然后,重启系统以挂载硬盘分区:sudo reboot这个命令会根据 /etc/fstab 文件中的配置信息挂载所有未挂载的磁盘分区。如果一切正常,你应该可以在指定的挂载点(例如 /data)中访问到挂载的硬盘分区。总结通过以上步骤,我们可以在 Deepin 系统中成功挂载 NTFS 格式的硬盘分区。在实际操作中,你可以根据自己的需求调整挂载点和挂载选项。同时,如果你要挂载其他文件系统类型的磁盘分区,需要相应地修改文件系统类型参数。
2024年11月15日
50 阅读
0 评论
0 点赞
2024-11-14
AlmaLinux 8安装包报错“Error: GPG check FAILED”解决方案
最近在AlmaLinux 8系统上安装git时,遇到了一个令人头疼的错误:Import of key(s) didn't help, wrong key(s)? GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux You can remove cached packages by executing 'dnf clean packages'. Error: GPG check FAILED这一错误导致git安装无法顺利进行,经过一番查找,终于在AlmaLinux官方文档中找到了线索,原来是与AlmaLinux 8的GPG key有关。问题根源去年年底,AlmaLinux经历了一次系统故障,导致用于签署AlmaLinux 8软件包的主密钥丢失。而当前使用的GPG key即将在2024年1月过期。因此,AlmaLinux团队启用了新的GPG key来签署RPM软件包和repodata。如果系统没有及时更新,仍然使用旧的GPG key,就可能会在安装新签署的软件包(如git)时出现上述错误。解决方案方法一:快速导入新GPG key(推荐)如果希望确保系统已经包含并信任新的AlmaLinux 8 GPG key,可以使用以下命令直接导入:rpm --import https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux这个命令会将新的GPG key导入到rpm数据库中。如果系统中尚未存在该密钥,它将被成功导入;如果已经信任该密钥,执行此命令不会产生任何影响,也无需进一步操作。方法二:检查并导入新key首先,检查系统中是否已经信任新的GPG key。运行以下命令:rpm -q gpg-pubkey-ced7258b-6525146f如果看到“gpg-pubkey-ced7258b-6525146f”的输出信息,表示新GPG key已经被信任,无需再进行操作。如果出现“package gpg-pubkey-ced7258b-6525146f is not installed”的错误提示,则说明系统尚未信任新的GPG key,需要手动导入。导入新的GPG key到rpm数据库:rpm --import https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux如果设备处于离线环境(airgapped environment),或者没有外部网络连接,并且已经安装了almalinux-release包版本8.8-3.el8或更高版本,也可以从本地文件导入密钥:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux方法三:常规更新依赖如果系统足够新并且定期安装更新,理论上不会遇到问题。因为新的AlmaLinux 8 GPG key已经包含在almalinux-release包版本8.8-3.el8或更高版本(2023年10月16日发布)中。在这种情况下,当尝试安装使用新密钥签名的软件包时,dnf可能会要求信任新密钥(这与在全新安装的操作系统上安装更新时的情况相同)。如果使用带有-y参数的dnf,则会自动信任新密钥。总结在遇到“Error: GPG check FAILED”错误时,不要惊慌。根据系统的具体情况,选择上述合适的方法来更新或导入新的AlmaLinux 8 GPG key,即可解决问题,顺利安装所需的软件包。希望这篇博客能够帮助到遇到同样问题的朋友们,让大家在使用AlmaLinux 8系统时更加顺畅。
2024年11月14日
50 阅读
0 评论
0 点赞
2023-12-01
Cloudflare Zero Trust 优选IP
国外很多网站都在使用 Cloudflare CDN,但分配给中国内地访客的 IP 并不友好(延迟高、丢包多、速度慢)。虽然 Cloudflare 公开了所有 IP 段 ,但想要在这么多 IP 中找到适合自己的,怕是要累死,于是就有了这个教程。优选IP链接参考 https://blog.misaka.rest/2023/03/12/cf-warp-yxip/ 项目代码https://github.com/XIU2/CloudflareSpeedTest/安装测速wget -N https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.2.5/CloudflareST_linux_amd64.tar.gz tar -zxf CloudflareST_linux_amd64.tar.gz chmod +x CloudflareST开始测速./CloudflareST -cfcolo KHH # 机场码查询 http://szdm.00cha.net/gj_japan.html修改优选IPwarp-cli set-custom-endpoint xxx.xxx.xxx.xxx:2408 warp-cli disable-connectivity-checks # 恢复custom-endpoint warp-cli clear-custom-endpoint
2023年12月01日
1,137 阅读
0 评论
0 点赞
2023-11-03
Linux查看进程以及进程占用端口
查看进程pidps -ef | grep 进程名 如果已知pid,想看详情,则用 ps -ef pid通过pid查看占用端口(mac)# linux netstat -na | grep 端口 netstat -nap | grep 进程pid netstat -nap | grep 进程pid #不加tcp或者udp的话mac上会报错 netstat -nap tcp | grep 进程pid netstat -nap udp | grep 进程pid
2023年11月03日
123 阅读
0 评论
0 点赞
2023-08-30
Deepin V20 rtl8821CU wifi网卡驱动安装
sudo apt update sudo apt install build-essential git dkms git clone https://github.com/brektrou/rtl8821CU.git cd rtl8821CU chmod +x dkms-install.sh sudo ./dkms-install.sh sudo modprobe 8821cu # 记得重启电脑
2023年08月30日
410 阅读
0 评论
0 点赞
2023-08-28
Deepin内核删除升级操作
查看当前内核版本uname -a # 或者 uname -r查看已安装的所有内核版本sudo dpkg --get-selections| grep linux删除内核版本# 注意,需要将内核映射文件(linux-image-版本号)和内核头文件(image-heasers-版本号)这两个文件都会删除掉 sudo apt remove --purge linux-headers-5.101.36-amd64-desktop linux-image-5.10.36-amd64-desktop升级内核版本sudo apt-get install linux-image-deepin-stable-amd64 linux-headers-deepin-stable-amd64查看启动顺序# 这一步主要是防止删除掉新版本内核后,系统没有自动启用旧版本内核进行启动 # 1、更新grub sudo update-grub # 2、查看启动顺序 grep menuentry /boot/grub/grub.cfg # 观察这个命令的输出,如果里面已经只存在一个版本的内核,那么之前的内核删除已经生效 menuentry 'Deepin 20.4 GNU/Linux' --class deepin --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-30e3145e-ae06-4dc3-8f6f-52e139b5a2c9' { submenu 'Deepin 20.4 GNU/Linux 的高级选项' $menuentry_id_option 'gnulinux-advanced-30e3145e-ae06-4dc3-8f6f-52e139b5a2c9' { menuentry 'Deepin 20.4 GNU/Linux,Linux 5.10.36-amd64-desktop' --class deepin --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.10.36-amd64-desktop-advanced-30e3145e-ae06-4dc3-8f6f-52e139b5a2c9' { # 3、修改启动顺序(如果删除了一个版本的内核后,系统内部还存在多个内核版本,则可以指定内核版本进行启动) sudo vi /etc/default/grub # Written by com.deepin.daemon.Grub2 DEEPIN_GFXMODE_ADJUSTED=1 # 需要修改这个值,修改的目标值就是在第2步查看启动顺序的序号,就按照版本号第一次出现的顺序,修改为1,2,3... # 注意,这个顺序并不完全是先后顺序,貌似只是各个版本的一个序号,这个需要自己尝试进行修改,我的经验是保留最旧的一般内核版本即可,先保证系统能正常启动后,再说进行内核升级啥的,毕竟设计到系统内核,稍微麻烦点也是OK的 DEEPIN_GFXMODE_NOT_SUPPORTED=2560x1440 GRUB_BACKGROUND="/boot/grub/themes/deepin/background.jpg" GRUB_CMDLINE_LINUX="" GRUB_CMDLINE_LINUX_DEFAULT="splash quiet" GRUB_DEFAULT=0 GRUB_DISTRIBUTOR="`/usr/bin/lsb_release -d -s 2>/dev/null || echo UOS 20`" GRUB_GFXMODE=1280x1024 GRUB_THEME="/boot/grub/themes/deepin/theme.txt" GRUB_TIMEOUT=5 # 4、保存并更新grub sudo update-grub # 5、重启系统,不出意外的话,系统就可以正常启动了
2023年08月28日
181 阅读
0 评论
0 点赞
2023-02-21
Linux 配置多JDK环境
下载多个版本的JDKhttps://www.oracle.com/java/technologies/downloads/#java11解压到/usr/lib目录我安装了3个版本JDK/usr/lib/jdk1.8.0_281 /usr/lib/jdk-11.0.11 /usr/lib/jdk-17.0.6-10分别注册环境alternatives --install /usr/bin/java java /usr/lib/jdk1.8.0_281/bin/java 8 alternatives --install /usr/bin/java java /usr/lib/jdk-11.0.11/bin/java 11 alternatives --install /usr/bin/java java /usr/lib/jdk-17.0.6-10/bin/java 17刷新配置update-alternatives --config java source /etc/profile java -version
2023年02月21日
235 阅读
0 评论
0 点赞
2022-10-11
dpkg: 处理软件包 xxx (--configure)时出错解决方法
dpkg: 处理软件包 xxx (–configure)时出错:依赖关系问题 - 仍未被配置 dpkg: 依赖关系问题使得 xxx 的配置工作不能继续: xxx 依赖于 libicu-dev;然而: 软件包 libicu-dev 尚未配置。解决方法:#先切换到root用户 sudo su mv /var/lib/dpkg/info /var/lib/dpkg/info_bak mkdir /var/lib/dpkg/info apt-get update && apt-get -f install mv /var/lib/dpkg/info/* /var/lib/dpkg/info_bak/ rm -rf /var/lib/dpkg/info mv /var/lib/dpkg/info_bak /var/lib/dpkg/info完成
2022年10月11日
650 阅读
0 评论
0 点赞
2022-10-10
深度系统Deepin 15.11如何升级到V20版本
DeepinV20属于大版本号升级,如果还是15.11版本的用户,在设置界面的系统更新里面是无法进行更新的,界面中仍会显示系统是最新的。那如何才能升级到V20版本呢?跨版本升级操作如下:需要手动更改sources.list的软件源(/etc/apt/sources.list)1) 将原来的软件源改为:deb [by-hash=force] https://community-packages.deepin.com/deepin/ apricot main contrib non-free2) 打开终端执行如下命令:sudo apt update sudo apt upgrade3) 更新完成重启并再次更新后,新增20官方商店源(/etc/apt/sources.list.d/appstore.list ),没有该文件则新建:deb https://community-store-packages.deepin.com/appstore eagle appstore4)再次执行sudo apt update sudo apt-get dist-upgrade这样便完成了15.11到V20的升级。
2022年10月10日
738 阅读
0 评论
0 点赞
2019-09-27
查看硬盘相关命令
lsblk查看硬盘分区情况NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 14.9G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi ├─sda2 8:2 0 8.8G 0 part / └─sda3 8:3 0 5.7G 0 part [SWAP] sdb 8:16 0 465.8G 0 disk └─sdb1 8:17 0 465.8G 0 part └─nas-data 254:0 0 465.8G 0 lvm /srv/dev-disk-by-id-dm-name-nas-data sdc 8:32 0 1.8T 0 disk └─nas-data_02 254:1 0 1.8T 0 lvm /srv/dev-disk-by-id-dm-name-nas-data_02 hdparm -C /dev/sd*查看硬盘休眠状态/dev/sda: drive state is: active/idle /dev/sda1: drive state is: active/idle /dev/sda2: drive state is: active/idle /dev/sda3: drive state is: active/idle /dev/sdb: drive state is: active/idle /dev/sdb1: drive state is: active/idle /dev/sdc: drive state is: standby
2019年09月27日
410 阅读
29 评论
0 点赞
2019-07-26
Linux查看磁盘空间使用状态以及docker空间清理
查看Linux系统的文件系统使用情况 df -h 查询各个目录或者文件占用空间的情况 du -sh *|sort -h du -h --max-depth=1 查看docker磁盘使用情况 du -hs /var/lib/docker/ 查看Docker的磁盘使用情况 docker system df 清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像) docker system prune 清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉 docker system prune -a 清理容器日志 docker inspect <容器名> | grep LogPath | cut -d ':' -f 2 | cut -d ',' -f 1 | xargs echo | xargs truncate -s 0 Job #!/bin/sh ls -lh $(find /var/lib/docker/containers/ -name *-json.log) echo "==================== start clean docker containers logs ==========================" logs=$(find /var/lib/docker/containers/ -name *-json.log) for log in $logs do echo "clean logs : $log" cat /dev/null > $log done echo "==================== end clean docker containers logs ==========================" ls -lh $(find /var/lib/docker/containers/ -name *-json.log) 限制Docker日志大小配置# 编辑docker配置文件 nano /etc/docker/daemon.json # 加入如下配置,限制每个容器最大日志大小50M,最大文件数1 { "log-driver":"json-file", "log-opts": {"max-size":"50m", "max-file":"1"} } # 重启docker服务 # 查看overlayer2对应容器 ```bash for container in $(docker ps --all --quiet --format '{{ .Names }}'); do echo "$(docker inspect $container --format '{{.GraphDriver.Data.MergedDir }}' | \ grep -Po '^.+?(?=/merged)' ) = $container" done ``` systemctl daemon-reload systemctl restart docker
2019年07月26日
2,252 阅读
3 评论
0 点赞
2019-02-13
Docker Swarm需在iptables放行的端口
#TCP端口2376 用于安全的Docker客户端通信iptables -I INPUT -p tcp --dport 2376 -j ACCEPT #TCP端口2377 集群管理端口,只需要在管理器节点上打开 iptables -I INPUT -p tcp --dport 2377 -j ACCEPT #TCP与UDP端口7946 节点之间通讯端口(容器网络发现) iptables -I INPUT -p tcp --dport 7946 -j ACCEPT iptables -I INPUT -p udp --dport 7946 -j ACCEPT #UDP端口4789 overlay网络通讯端口(容器入口网络) iptables -I INPUT -p udp --dport 4789 -j ACCEPT #portainer 的endpoint端口 iptables -I INPUT -p tcp --dport 9001 -j ACCEPT
2019年02月13日
685 阅读
0 评论
0 点赞
2019-02-13
关闭RPCBind服务
# 停止rpcbindsystemctl stop rpcbind # 禁止开机启动 systemctl disable rpcbind # 立即执行关闭 systemctl stop rpcbind.socket
2019年02月13日
648 阅读
0 评论
0 点赞
2019-02-13
记一次阿里云被黑客使用RPCBind服务进行UDP反射DDoS攻击
最近总是收到阿里云的预警邮件:您的云服务器(xxx.xxx.xxx.xxx)由于被检测到对外攻击,已阻断该服务器对其它服务器端口(UDP:ALL)的访问... 发现然后在收到预警时候立马登录上去看,发现rpcbind -w这个进程cpu使用率比较高,就查了下关于rpcbind服务的漏洞问题,发现如下:【风险详情】 RPCBind(也称Portmapper、portmap或RPCPortmapper)是一种通用的RPC端口映射功能,默认绑定在端口111上,可以将RPC服务号映射到网络端口号。它的工作原理是当RPC服务启动时,它会告诉RPCBind它正在监听的地址,以及它准备服务的RPC服务号;当客户端希望对给定的服务号进行RPC调用时,客户端首先需要联系服务器上的RPCBind,以确定应该在哪里发送RPC请求的地址。利用RPCBind进行UDP反射DDoS攻击的事件相对较少,这也是腾讯云安全今年以来捕获的首例利用云主机上的RPCBind服务进行UDP反射DDoS攻击的行为。不过其实早在2015年Level 3 Threat Research Labs就发现了这样一种新的攻击DDoS放大攻击形式,该反射方式放大系数最高可达28.4,US-CERT也在当时将该种攻击方式加入了UDP 攻击类型列表,具体可见https://www.us-cert.gov/ncas/alerts/TA14-017A 。 部分用户在云主机上启动RPCBind服务,服务绑定在默认TCP或UDP端口111,同时开放在外网,黑客通过批量扫描开放的111 UCP端口的服务器,利用UDP反射放大DDoS攻击原理发送虚假UDP请求,伪造源IP地址,将请求包中的源IP地址替换成攻击目标,反射服务器收到请求包发送响应来完成整个攻击流程。由于发送的请求包远小于响应,所以最终达到了反射放大的效果。 【修复建议】 服务被恶意利用的主要原因是RPCBind服务绑定在默认端口并开放在外网从而导致黑客可以访问并发送伪造的请求。 1.如果业务中并没有使用RPCBind服务,建议直接关闭 2.如果因业务需要必须使用RPCBind服务,建议通过安全组/防火墙等方式进行访问限制或者将其绑定在内网IP,不要开放在外网 解决因为我没有启用防火墙,也没有启用安全组策略。所以立马先开启iptables服务,教程参考https://blog.minws.com/archives/660/然后将RPCBind服务关闭,教程参考 https://blog.minws.com/archives/662/
2019年02月13日
782 阅读
0 评论
0 点赞
2019-02-13
CentOS7下关闭默认防火墙并启用iptables防火墙
CentOS7默认使用的是firewall作为防火墙, 貌似是基于iptables的规则,这里我们重新启用iptables禁用/停止自带的firewalld服务#查看firewalld运行状态 systemctl start firewalld #停止firewalld服务 systemctl stop firewalld #禁用firewalld服务 systemctl mask firewalld 安装iptables#先检查是否安装了iptables service iptables status #安装iptables yum install -y iptables #升级iptables(安装的最新版本则不需要) yum update iptables #安装iptables-services yum install iptables-services 设置iptables的规则#查看iptables现有规则 iptables -L -n #先允许所有,不然有可能会杯具 iptables -P INPUT ACCEPT #清空所有默认规则 iptables -F #清空所有自定义规则 iptables -X #所有计数器归0 iptables -Z #允许来自于lo接口的数据包(本地访问) iptables -A INPUT -i lo -j ACCEPT #开放22端口 iptables -A INPUT -p tcp --dport 22 -j ACCEPT #开放21端口(FTP) iptables -A INPUT -p tcp --dport 21 -j ACCEPT #开放80端口(HTTP) iptables -A INPUT -p tcp --dport 80 -j ACCEPT #开放443端口(HTTPS) iptables -A INPUT -p tcp --dport 443 -j ACCEPT #允许ping iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT #允许接受本机请求之后的返回数据 RELATED,是为FTP设置的 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #其他入站一律丢弃 iptables -P INPUT DROP #所有出站一律绿灯 iptables -P OUTPUT ACCEPT #所有转发一律丢弃 iptables -P FORWARD DROP 其他参考规则#开启一个端口 iptables -I INPUT -p tcp --dport 3306 -j ACCEPT #关闭一个端口 iptables -I INPUT -p tcp --dport 3306 -j DROP #删除第一个规则 iptables -D INPUT 1 #保存规则 service iptables save #重启iptables service iptables restart #如果要添加内网ip信任(接受其所有TCP请求) iptables -A INPUT -p tcp -s 45.96.174.68 -j ACCEPT #过滤所有非以上规则的请求,注意:必须先将22端口加入到input规则,否则将ssh链接不上 iptables -P INPUT DROP #要封停一个IP,使用下面这条命令: iptables -I INPUT -s ***.***.***.*** -j DROP #要解封一个IP,使用下面这条命令: iptables -D INPUT -s ***.***.***.*** -j DROP 保存规则设定service iptables save 开启iptables服务#注册iptables服务 #相当于以前的chkconfig iptables on systemctl enable iptables.service #开启服务 systemctl start iptables.service #查看状态 systemctl status iptables.service
2019年02月13日
254 阅读
0 评论
0 点赞
2019-01-09
Centos7登录报错-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
报错信息-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory,警告:setlocale: LC_CTYPE: 无法改变区域选项 (UTF-8)解决方案编辑 /etc/environment 文件,没有就新建,将下面两行放进去就行了 LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
2019年01月09日
424 阅读
0 评论
0 点赞
2018-10-26
Docker部署JupyterHub并开启Lab跟Github授权
本文介绍了如何使用Docker来运行JupyterHub,并使用Github来授权登录,登录后JupyterHub会创建单用户的docker容器,并自定义用户docker镜像开启Lab功能。拉取相关镜像docker pull jupyterhub/jupyterhub docker pull jupyterhub/singleuser:0.9 创建jupyterhub_network网络docker network create --driver bridge jupyterhub_network 创建jupyterhub的volumesudo mkdir -pv /data/jupyterhub sudo chown -R root /data/jupyterhub sudo chmod -R 777 /data/jupyterhub 复制jupyterhub_config.py到volumecp jupyterhub_config.py /data/jupyterhub/jupyterhub_config.py jupyterhub_config.py# Configuration file for Jupyter Hub c = get_config() # spawn with Docker c.JupyterHub.spawner_class = 'dockerspawner.DockerSpawner' # Spawn containers from this image c.DockerSpawner.image = 'dhso/jupyter_lab_singleuser:latest' # JupyterHub requires a single-user instance of the Notebook server, so we # default to using the `start-singleuser.sh` script included in the # jupyter/docker-stacks *-notebook images as the Docker run command when # spawning containers. Optionally, you can override the Docker run command # using the DOCKER_SPAWN_CMD environment variable. c.DockerSpawner.extra_create_kwargs.update({ 'command': "start-singleuser.sh --SingleUserNotebookApp.default_url=/lab" }) # Connect containers to this Docker network network_name = 'jupyterhub_network' c.DockerSpawner.use_internal_ip = True c.DockerSpawner.network_name = network_name # Pass the network name as argument to spawned containers c.DockerSpawner.extra_host_config = { 'network_mode': network_name } # Explicitly set notebook directory because we'll be mounting a host volume to # it. Most jupyter/docker-stacks *-notebook images run the Notebook server as # user `jovyan`, and set the notebook directory to `/home/jovyan/work`. # We follow the same convention. notebook_dir = '/home/jovyan/work' c.DockerSpawner.notebook_dir = notebook_dir # Mount the real user's Docker volume on the host to the notebook user's # notebook directory in the container c.DockerSpawner.volumes = { 'jupyterhub-user-{username}': notebook_dir } # volume_driver is no longer a keyword argument to create_container() # c.DockerSpawner.extra_create_kwargs.update({ 'volume_driver': 'local' }) # Remove containers once they are stopped c.DockerSpawner.remove_containers = True # For debugging arguments passed to spawned containers c.DockerSpawner.debug = True # The docker instances need access to the Hub, so the default loopback port doesn't work: # from jupyter_client.localinterfaces import public_ips # c.JupyterHub.hub_ip = public_ips()[0] c.JupyterHub.hub_ip = 'jupyterhub' # IP Configurations c.JupyterHub.ip = '0.0.0.0' c.JupyterHub.port = 80 # OAuth with GitHub c.JupyterHub.authenticator_class = 'oauthenticator.GitHubOAuthenticator' c.Authenticator.whitelist = whitelist = set() c.Authenticator.admin_users = admin = set() import os os.environ['GITHUB_CLIENT_ID'] = '你自己的GITHUB_CLIENT_ID' os.environ['GITHUB_CLIENT_SECRET'] = '你自己的GITHUB_CLIENT_SECRET' os.environ['OAUTH_CALLBACK_URL'] = '你自己的OAUTH_CALLBACK_URL,类似于http://xxx/hub/oauth_callback' join = os.path.join here = os.path.dirname(__file__) with open(join(here, 'userlist')) as f: for line in f: if not line: continue parts = line.split() name = parts[0] whitelist.add(name) if len(parts) > 1 and parts[1] == 'admin': admin.add(name) c.GitHubOAuthenticator.oauth_callback_url = os.environ['OAUTH_CALLBACK_URL'] 复制userlist到volume,userlist存储了用户名以及权限cp userlist /data/jupyterhub/userlist dhso admin wengel 编译dockerfiledocker build -t dhso/jupyterhub . DockerfileARG BASE_IMAGE=jupyterhub/jupyterhub FROM ${BASE_IMAGE} RUN pip install --no-cache --upgrade jupyter RUN pip install --no-cache dockerspawner RUN pip install --no-cache oauthenticator EXPOSE 80 编译单用户jupyter的dockerfile,并开启labdocker build -t dhso/jupyter_lab_singleuser . DockerfileARG BASE_IMAGE=jupyterhub/singleuser FROM ${BASE_IMAGE} # 加速 # RUN conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ # RUN conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ # RUN conda config --set show_channel_urls yes # Install jupyterlab # RUN conda install -c conda-forge jupyterlab RUN pip install jupyterlab RUN jupyter serverextension enable --py jupyterlab --sys-prefix USER jovyan 创建jupyterhub的docker容器,映射80端口docker run -d --name jupyterhub -p 80:80 \ --network jupyterhub_network \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /data/jupyterhub:/srv/jupyterhub dhso/jupyterhub:latest 访问localhost就能看到界面
2018年10月26日
453 阅读
0 评论
0 点赞
2018-10-11
HG6201M的光猫超级管理员获取
1. 用电脑连接你的光猫 确认你可以打开光猫的登录界面 2. 打开网址 http://192.168.1.1/cgi-bin/telnetenable.cgi?telnetenable=1 开启telnet 服务 3. 打开命令行 输入telnet 192.168.1.1 进入 telnet服务 用户名 root 密码 hg2x0 4. 查看这个文件的内容 cat /flash/cfg/agentconf/factory.conf,第一行和第二行 就是用户名和密码了
2018年10月11日
1,900 阅读
1 评论
1 点赞
2018-07-20
swarm 安装小记
ssh root@40.73.96.111ssh root@40.73.99.31 ssh root@40.73.96.219 docker swarm join --token SWMTKN-1-2g1m3acikt9jfj1mnhyfqyta2e4w58we0lapdyri8i8aec3ndz-e1pztefxdo6nxu85n493y2g5p 172.16.5.5:2377 ### docker ### yum remove docker docker-client docker-client-latest docker-common \ docker-latest docker-latest-logrotate docker-logrotate \ docker-selinux docker-engine-selinux docker-engine yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce systemctl start docker systemctl enable docker nano /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"], "insecure-registries":["172.16.5.5:9060"] } systemctl daemon-reload systemctl restart docker.service ### swarm ### 初始化swarm manager并制定网卡地址 docker swarm init --advertise-addr 192.168.10.117 强制删除集群,如果是manager,需要加–force docker swarm leave --force docker node rm docker-118 查看swarm worker的连接令牌 docker swarm join-token worker 查看swarm manager的连接令牌 docker swarm join-token manager 使旧令牌无效并生成新令牌 docker swarm join-token --rotate 加入docker swarm集群 docker swarm join --token SWMTKN-1-5d2ipwo8jqdsiesv6ixze20w2toclys76gyu4zdoiaf038voxj-8sbxe79rx5qt14ol14gxxa3wf 192.168.10.117:2377 查看集群中的节点 docker node ls 查看集群中节点信息 docker node inspect docker-117 --pretty 调度程序可以将任务分配给节点 docker node update --availability active docker-118 调度程序不向节点分配新任务,但是现有任务仍然保持运行 docker node update --availability pause docker-118 调度程序不会将新任务分配给节点。调度程序关闭任何现有任务并在可用节点上安排它们 docker node update --availability drain docker-118 添加节点标签 docker node update --label-add label1 --label-add bar=label2 docker-117 docker node update --label-rm label1 docker-117 将节点升级为manager docker node promote docker-118 将节点降级为worker docker node demote docker-118 查看服务列表 docker service ls 查看服务的具体信息 docker service ps redis 创建一个不定义name,不定义replicas的服务 docker service create nginx 创建一个指定name的服务 docker service create --name my_web nginx 创建一个指定name、run cmd的服务 docker service create --name helloworld alping ping docker.com 创建一个指定name、version、run cmd的服务 docker service create --name helloworld alping:3.6 ping docker.com 创建一个指定name、port、replicas的服务 docker service create --name my_web --replicas 3 -p 80:80 nginx 为指定的服务更新一个端口 docker service update --publish-add 80:80 my_web 为指定的服务删除一个端口 docker service update --publish-rm 80:80 my_web 将redis:3.0.6更新至redis:3.0.7 docker service update --image redis:3.0.7 redis 配置运行环境,指定工作目录及环境变量 docker service create --name helloworld --env MYVAR=myvalue --workdir /tmp --user my_user alping ping docker.com 创建一个helloworld的服务 docker service create --name helloworld alpine ping docker.com 更新helloworld服务的运行命令 docker service update --args “ping www.baidu.com” helloworld 删除一个服务 docker service rm my_web 在每个群组节点上运行web服务 docker service create --name tomcat --mode global --publish mode=host,target=8080,published=8080 tomcat:latest 创建一个overlay网络 docker network create --driver overlay my_network docker network create --driver overlay --subnet 10.10.10.0/24 --gateway 10.10.10.1 my-network 创建服务并将网络添加至该服务 docker service create --name test --replicas 3 --network my-network redis 删除群组网络 docker service update --network-rm my-network test 更新群组网络 docker service update --network-add my_network test 创建群组并配置cpu和内存 docker service create --name my_nginx --reserve-cpu 2 --reserve-memory 512m --replicas 3 nginx 更改所分配的cpu和内存 docker service update --reserve-cpu 1 --reserve-memory 256m my_nginx 指定每次更新的容器数量 --update-parallelism 指定容器更新的间隔 --update-delay 定义容器启动后监控失败的持续时间 --update-monitor 定义容器失败的百分比 --update-max-failure-ratio 定义容器启动失败之后所执行的动作 --update-failure-action 创建一个服务并运行3个副本,同步延迟10秒,10%任务失败则暂停 docker service create --name mysql_5_6_36 --replicas 3 --update-delay 10s --update-parallelism 1 --update-monitor 30s --update-failure-action pause --update-max-failure-ratio 0.1 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.36 回滚至之前版本 docker service update --rollback mysql 自动回滚 docker service create --name redis --replicas 6 --rollback-parallelism 2 --rollback-monitor 20s --rollback-max-failure-ratio .2 redis:latest 创建服务并将目录挂在至container中 docker service create --name mysql --publish 3306:3306 --mount type=bind,src=/data/mysql,dst=/var/lib/mysql --replicas 3 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.36 查看配置 docker config ls 查看配置详细信息 docker config inspect mysql 删除配置 docker config rm mysql ### portainer ### docker volume create portainer_data docker service create \ --name portainer \ --publish 9000:9000 \ --replicas=1 \ --constraint 'node.role == manager' \ --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \ --mount type=volume,src=portainer_data,dst=/data \ portainer/portainer \ -H unix:///var/run/docker.sock ### gitlab ### docker volume create --name gitlab_config docker volume create --name gitlab_logs docker volume create --name gitlab_data docker service create --name swarm_gitlab\ --publish 5002:443 --publish 5003:80 --publish 5004:22 \ --replicas 1 \ --mount type=volume,source=gitlab_config,destination=/etc/gitlab \ --mount type=volume,source=gitlab_logs,destination=/var/log/gitlab \ --mount type=volume,source=gitlab_data,destination=/var/opt/gitlab \ --constraint 'node.labels.type == gitlab_node' \ gitlab/gitlab-ce:latest ### mysql ### mysql: image: mysql:5.6.40 environment: # 设置时区为Asia/Shanghai - TZ=Asia/Shanghai - MYSQL_ROOT_PASSWORD=admin@1234 volumes: - mysql:/var/lib/mysql deploy: replicas: 1 restart_policy: condition: any resources: limits: cpus: "0.2" memory: 512M update_config: parallelism: 1 # 每次更新1个副本 delay: 5s # 每次更新间隔 monitor: 10s # 单次更新多长时间后没有结束则判定更新失败 max_failure_ratio: 0.1 # 更新时能容忍的最大失败率 order: start-first # 更新顺序为新任务启动优先 ports: - 3306:3306 networks: - myswarm-net networks: myswarm-net: external: true version: "3.2" services: web: image: 'gitlab/gitlab-ce:latest' restart: always environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://40.73.96.111:9030' ports: - '9030:80' - '9031:443' - '9032:22' volumes: - '/var/lib/docker/volumes/gitlab_config/_data:/etc/gitlab' - '/var/lib/docker/volumes/gitlab_logs/_data:/var/log/gitlab' - '/var/lib/docker/volumes/gitlab_data/_data:/var/opt/gitlab' # 配置http协议所使用的访问地址 external_url 'http://40.73.96.111:9030' # 配置ssh协议所使用的访问地址和端口 gitlab_rails['gitlab_ssh_host'] = '40.73.96.111' gitlab_rails['gitlab_shell_ssh_port'] = 9032 nginx['listen_port'] = 80 # 这里以新浪的邮箱为例配置smtp服务器 gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.sina.com" gitlab_rails['smtp_port'] = 25 gitlab_rails['smtp_user_name'] = "name4mail" gitlab_rails['smtp_password'] = "passwd4mail" gitlab_rails['smtp_domain'] = "sina.com" gitlab_rails['smtp_authentication'] = :login gitlab_rails['smtp_enable_starttls_auto'] = true # 还有个需要注意的地方是指定发送邮件所用的邮箱,这个要和上面配置的邮箱一致 gitlab_rails['gitlab_email_from'] = 'name4mail@sina.com' $ curl -L https://portainer.io/download/portainer-agent-stack.yml -o portainer-agent-stack.yml $ docker stack deploy --compose-file=portainer-agent-stack.yml portainer //remote use mysql; select host, user, authentication_string, plugin from user; GRANT ALL ON *.* TO 'root'@'%'; flush privileges; //mysql8 ALTER USER 'root'@'localhost' IDENTIFIED BY 'admin@1234' PASSWORD EXPIRE NEVER; ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'admin@1234'; FLUSH PRIVILEGES; ace-center/target/ace-center.jar ace-center/target/ docker rm -f ace-center sleep 1 docker service create --name ace-center --publish 6010:8761 --replicas 1 -e JAR_PATH=/tmp/ace-center.jar dhso/springboot-app:1.0 FROM java:8 VOLUME /tmp ADD ace-center/target/ace-center.jar app.jar RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] docker rm -f ace-center sleep 1 docker rmi -f dhso/ace-center sleep 1 cd /tmp/ace-center docker build -t dhso/ace-center . sleep 1 docker service create --name ace-center --publish 6010:8761 --replicas 1 dhso/ace-center docker service create --name ace-center --publish 6010:8080 --replicas 1 -e JAR_PATH=/tmp/ace-center.jar dhso/springboot-app:1.0 ## ace-center target/ace-center.jar,src/main/docker/Dockerfile ace-center docker service rm ace-center sleep 1s docker rm -f ace-center sleep 1s docker images|grep 172.16.5.5:9060/ace-center|awk '{print $3}'|xargs docker rmi -f sleep 1s cd /tmp/ace-center rm -rf docker mkdir docker cp target/ace-center.jar docker/ace-center.jar cp src/main/docker/Dockerfile docker/Dockerfile cd docker docker build -t 172.16.5.5:9060/ace-center:latest . sleep 1s docker push 172.16.5.5:9060/ace-center:latest sleep 1s docker network create --driver overlay --subnet 10.222.0.0/16 ace_network sleep 1s docker service create --name ace-center --network ace_network --constraint 'node.labels.type == worker' --publish 6010:8761 --replicas 1 172.16.5.5:9060/ace-center:latest ### ace-config ### target/ace-config.jar,src/main/docker/Dockerfile ace-config docker service rm ace-config sleep 1s docker rm -f ace-config sleep 1s docker images|grep 172.16.5.5:9060/ace-config|awk '{print $3}'|xargs docker rmi -f sleep 1s cd /tmp/ace-config rm -rf docker mkdir docker cp target/ace-config.jar docker/ace-config.jar cp src/main/docker/Dockerfile docker/Dockerfile cd docker docker build -t 172.16.5.5:9060/ace-config:latest . sleep 1s docker push 172.16.5.5:9060/ace-config:latest sleep 1s docker network create --driver overlay --subnet 10.222.0.0/16 ace_network sleep 1s docker service create --name ace-config --network ace_network --constraint 'node.labels.type == worker' --publish 6011:8750 --replicas 1 172.16.5.5:9060/ace-config:latest ### ace-auth ### target/ace-auth.jar,src/main/docker/Dockerfile ace-auth docker service rm ace-auth sleep 1s docker rm -f ace-auth sleep 1s docker images|grep 172.16.5.5:9060/ace-auth|awk '{print $3}'|xargs docker rmi -f sleep 1s cd /tmp/ace-auth rm -rf docker mkdir docker cp target/ace-auth.jar docker/ace-auth.jar cp src/main/docker/Dockerfile docker/Dockerfile cd docker docker build -t 172.16.5.5:9060/ace-auth:latest . sleep 1s docker push 172.16.5.5:9060/ace-auth:latest sleep 1s docker network create --driver overlay --subnet 10.222.0.0/16 ace_network sleep 1s docker service create --name ace-auth --network ace_network --constraint 'node.labels.type == worker' --publish 6013:9777 --replicas 1 172.16.5.5:9060/ace-auth:latest ### ace-admin ### target/ace-admin.jar,src/main/docker/Dockerfile,src/main/docker/wait-for-it.sh ace-admin docker service rm ace-admin sleep 1s docker rm -f ace-admin sleep 1s docker images|grep 172.16.5.5:9060/ace-admin|awk '{print $3}'|xargs docker rmi -f sleep 1s cd /tmp/ace-admin rm -rf docker mkdir docker cp target/ace-admin.jar docker/ace-admin.jar cp src/main/docker/Dockerfile docker/Dockerfile cp src/main/docker/wait-for-it.sh docker/wait-for-it.sh cd docker docker build -t 172.16.5.5:9060/ace-admin:latest . sleep 1s docker push 172.16.5.5:9060/ace-admin:latest sleep 1s docker network create --driver overlay --subnet 10.222.0.0/16 ace_network sleep 1s docker service create --name ace-admin --network ace_network --constraint 'node.labels.type == worker' --publish 6014:8762 --replicas 1 172.16.5.5:9060/ace-admin:latest ### ace-gate ### target/ace-gate.jar,src/main/docker/Dockerfile,src/main/docker/wait-for-it.sh ace-gate docker service rm ace-gate sleep 1s docker rm -f ace-gate sleep 1s docker images|grep 172.16.5.5:9060/ace-gate|awk '{print $3}'|xargs docker rmi -f sleep 1s cd /tmp/ace-gate rm -rf docker mkdir docker cp target/ace-gate.jar docker/ace-gate.jar cp src/main/docker/Dockerfile docker/Dockerfile cp src/main/docker/wait-for-it.sh docker/wait-for-it.sh cd docker docker build -t 172.16.5.5:9060/ace-gate:latest . sleep 1s docker push 172.16.5.5:9060/ace-gate:latest sleep 1s docker network create --driver overlay --subnet 10.222.0.0/16 ace_network sleep 1s docker service create --name ace-gate --network ace_network --constraint 'node.labels.type == worker' --publish 6015:8765 --replicas 1 172.16.5.5:9060/ace-gate:latest ### ace-dict ### target/ace-dict.jar,src/main/docker/Dockerfile,src/main/docker/wait-for-it.sh ace-dict docker service rm ace-dict sleep 1s docker rm -f ace-dict sleep 1s docker images|grep 172.16.5.5:9060/ace-dict|awk '{print $3}'|xargs docker rmi -f sleep 1s cd /tmp/ace-dict rm -rf docker mkdir docker cp target/ace-dict.jar docker/ace-dict.jar cp src/main/docker/Dockerfile docker/Dockerfile cp src/main/docker/wait-for-it.sh docker/wait-for-it.sh cd docker docker build -t 172.16.5.5:9060/ace-dict:latest . sleep 1s docker push 172.16.5.5:9060/ace-dict:latest sleep 1s docker network create --driver overlay --subnet 10.222.0.0/16 ace_network sleep 1s docker service create --name ace-dict --network ace_network --constraint 'node.labels.type == worker' --publish 6016:9999 --replicas 1 172.16.5.5:9060/ace-dict:latest ### ace-ui ### FROM node:8-alpine run mkdir webapp add . ./webapp run npm config set registry https://registry.npm.taobao.org run npm install -g http-server WORKDIR ./webapp cmd http-server -p 9527 EXPOSE 9527 ========== dist/*,Dockerfile ace-ui docker service rm ace-ui sleep 1s docker rm -f ace-ui sleep 1s docker images|grep 172.16.5.5:9060/ace-ui|awk '{print $3}'|xargs docker rmi -f sleep 1s cd /tmp/ace-ui cp Dockerfile dist/Dockerfile cd dist docker build -t 172.16.5.5:9060/ace-ui:latest . sleep 1s docker push 172.16.5.5:9060/ace-ui:latest sleep 1s docker network create --driver overlay --subnet 10.222.0.0/16 ace_network sleep 1s docker service create --name ace-ui --network ace_network --constraint 'node.labels.type == worker' --publish 6012:9527 --replicas 1 172.16.5.5:9060/ace-ui:latest ### ace-monitor ### target/ace-monitor.jar,src/main/docker/Dockerfile ace-monitor docker service rm ace-monitor sleep 1s docker rm -f ace-monitor sleep 1s docker images|grep 172.16.5.5:9060/ace-monitor|awk '{print $3}'|xargs docker rmi -f sleep 1s cd /tmp/ace-monitor rm -rf docker mkdir docker cp target/ace-monitor.jar docker/ace-monitor.jar cp src/main/docker/Dockerfile docker/Dockerfile cd docker docker build -t 172.16.5.5:9060/ace-monitor:latest . sleep 1s docker push 172.16.5.5:9060/ace-monitor:latest sleep 1s docker network create --driver overlay --subnet 10.222.0.0/16 ace_network sleep 1s docker service create --name ace-monitor --network ace_network --constraint 'node.labels.type == worker' --publish 6017:8764 --replicas 1 172.16.5.5:9060/ace-monitor:latest ### ace-trace ### target/ace-trace.jar,src/main/docker/Dockerfile ace-trace docker service rm ace-trace sleep 1s docker rm -f ace-trace sleep 1s docker images|grep 172.16.5.5:9060/ace-trace|awk '{print $3}'|xargs docker rmi -f sleep 1s cd /tmp/ace-trace rm -rf docker mkdir docker cp target/ace-trace.jar docker/ace-trace.jar cp src/main/docker/Dockerfile docker/Dockerfile cd docker docker build -t 172.16.5.5:9060/ace-trace:latest . sleep 1s docker push 172.16.5.5:9060/ace-trace:latest sleep 1s docker network create --driver overlay --subnet 10.222.0.0/16 ace_network sleep 1s docker service create --name ace-trace --network ace_network --constraint 'node.labels.type == worker' --publish 6018:9411 --replicas 1 172.16.5.5:9060/ace-trace:latest docker service create --name redis_01 --mount type=volume,src=redis_data,dst=/data \ --network ace_network --constraint 'node.labels.type == manager' --publish 9050:6379 --replicas 1 redis:latest docker service create --name mysql_01 --mount type=volume,src=mysql_data,dst=/var/lib/mysql \ --env MYSQL_ROOT_PASSWORD=admin@1234 --network ace_network \ --constraint 'node.labels.type == manager' --publish 9051:3306 --replicas 1 mysql:5.6 /usr/bin/mysqladmin -u root password 'admin@1234' docker service create --name rabbitmq_01 --mount type=volume,src=rabbitmq,dst=/var/lib/rabbitmq \ --network ace_network --constraint 'node.labels.type == manager' \ --publish 9052:5671 --publish 9053:5672 --publish 9054:15672 --replicas 1 rabbitmq:latest FROM node:8-alpine run mkdir webapp add . ./webapp run npm config set registry https://registry.npm.taobao.org run npm install -g http-server WORKDIR ./webapp cmd http-server -p 9527 EXPOSE 9527 yum install -y epel-release yum install -y htop
2018年07月20日
184 阅读
0 评论
0 点赞
2018-06-19
centos服务自启动模板
示例假如要启动的命令是/usr/local/frp/frps -c /usr/local/frp/frps.ini生成启动文件nano /etc/init.d/frps#!/bin/sh ### BEGIN INIT INFO # Provides: frps # Required-Start: $local_fs $remote_fs $network # Required-Stop: $local_fs $remote_fs $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: frps # Description: # ### END INIT INFO NAME=frps DAEMON=/usr/local/frp/$NAME CONFIG=/usr/local/frp/$NAME.ini case "$1" in start) echo "Starting $NAME..." nohup $DAEMON -c $CONFIG >/dev/null 2>&1 & ;; stop) echo "Stopping $NAME..." sudo ps -ef|grep $NAME|grep -v grep|cut -c 9-15|xargs kill -9 ;; restart) $0 stop && sleep 2 && $0 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac exit 0 赋权并且设置自启动赋权 chmod 777 frps设置自启动 chkconfig frps on启动 service frps start
2018年06月19日
126 阅读
0 评论
0 点赞
1
2
3