首页
关于
壁纸
直播
留言
友链
统计
Search
1
《三国志英杰传》攻略
6,034 阅读
2
Emby客户端IOS破解
5,767 阅读
3
白嫖Emby
5,764 阅读
4
《吞食天地1》金手指代码
4,691 阅读
5
破解emby-server
4,039 阅读
moonjerx
game
age-of-empires
zx3
san-guo-zhi
尼尔:机械纪元
net
emby
learn-video
docker
torrent
photoshop
route
minio
git
ffmpeg
im
vue
gitlab
typecho
svn
alipay
nasm
srs
mail-server
tailscale
kkfileview
aria2
webdav
synology
redis
oray
chemical
mxsite
math
π
x-ui
digital-currency
server
nginx
baota
k8s
http
cloud
linux
shell
database
vpn
esxi
rancher
domain
k3s
ewomail
os
android
windows
ios
app-store
macos
develop
java
javascript
uniapp
nodejs
hbuildx
maven
android-studio
jetbrain
jenkins
css
mybatis
php
python
hardware
hard-disk
pc
RAM
software
pt
calibre
notion
office
language
literature
philosophy
travel
登录
Search
标签搜索
ubuntu
mysql
openwrt
zerotier
springboot
centos
openvpn
jdk
吞食天地2
synology
spring
idea
windows11
吞食天地1
transmission
google-play
Japanese
xcode
群晖
kiftd
MoonjerX
累计撰写
370
篇文章
累计收到
459
条评论
首页
栏目
moonjerx
game
age-of-empires
zx3
san-guo-zhi
尼尔:机械纪元
net
emby
learn-video
docker
torrent
photoshop
route
minio
git
ffmpeg
im
vue
gitlab
typecho
svn
alipay
nasm
srs
mail-server
tailscale
kkfileview
aria2
webdav
synology
redis
oray
chemical
mxsite
math
π
x-ui
digital-currency
server
nginx
baota
k8s
http
cloud
linux
shell
database
vpn
esxi
rancher
domain
k3s
ewomail
os
android
windows
ios
app-store
macos
develop
java
javascript
uniapp
nodejs
hbuildx
maven
android-studio
jetbrain
jenkins
css
mybatis
php
python
hardware
hard-disk
pc
RAM
software
pt
calibre
notion
office
language
literature
philosophy
travel
页面
关于
壁纸
直播
留言
友链
统计
搜索到
47
篇与
moonjerx
的结果
2024-10-13
自动选择可用的Maven仓库并下载settings.xml文件
在使用Maven进行项目构建时,正确配置settings.xml文件对于依赖管理和仓库访问至关重要。然而,在多仓库环境下,如何确保能够自动选择一个可用的仓库来下载settings.xml文件呢?本文将介绍一个简单的Shell脚本,它可以帮助我们解决这个问题。脚本功能该脚本的主要功能包括:定义多个Maven仓库及其对应的settings.xml文件URL。检查每个仓库是否可用。如果找到可用的仓库,则从其对应的URL下载最新的settings.xml文件到用户的.m2目录下。如果所有仓库都不可用,则输出错误信息。脚本代码#!/bin/bash # 定义仓库URL及对应的settings.xml文件URL declare -A REPOS=( ["http://100.100.100.196:30024/repository/maven-public/"]="https://dl.test.com/intranet/settings.xml" ["http://100.100.100.72:30024/repository/maven-public/"]="https://dl.test.com/private/settings.xml" ["https://maven.test.com/repository/maven-public/"]="https://dl.test.com/internet/settings.xml" ) # 获取当前登录用户的用户名 USERNAME=$(whoami) # 根据操作系统设置settings.xml的目标路径 if [[ "$OSTYPE" == "darwin"* ]]; then # macOS SETTINGS_XML="/Users/$USERNAME/.m2/settings.xml" elif [[ "$OSTYPE" == "msys"* ]] || [[ "$OSTYPE" == "cygwin"* ]]; then # Windows (Git Bash or Cygwin) SETTINGS_XML="C:/Users/$USERNAME/.m2/settings.xml" else # Linux 或其他 Unix-like 系统 SETTINGS_XML="$HOME/.m2/settings.xml" fi # 函数:检查仓库是否可用 check_repo() { local repo_url=$1 curl --silent --head --fail $repo_url > /dev/null if [ $? -eq 0 ]; then return 0 # 可用 else return 1 # 不可用 fi } # 函数:下载settings.xml文件 download_settings() { local settings_url=$1 echo "正在下载 $settings_url 到 $SETTINGS_XML" curl -s -o "$SETTINGS_XML" "$settings_url" if [ $? -eq 0 ]; then echo "下载成功" else echo "下载失败" fi } # 主逻辑:按顺序检查仓库直到找到一个可用的 for repo in "${!REPOS[@]}"; do if check_repo $repo; then download_settings ${REPOS[$repo]} exit 0 # 成功下载后退出脚本 else echo "仓库 $repo 不可用,尝试下一个..." fi done echo "所有仓库均不可用,无法更新settings.xml"使用方法将上述脚本保存为一个文件,例如命名为update-settings.sh。给该脚本执行权限:chmod +x update-settings.sh。运行脚本:./update-settings.sh。注意事项确保您的系统已安装curl工具,这是脚本中用于网络请求的工具。根据实际情况修改仓库URL和对应的settings.xml文件URL。此脚本假定用户已经有一个.m2目录,如果不存在,请先创建或允许脚本有权限创建。通过这个脚本,我们可以轻松地在多个可能的Maven仓库之间切换,并始终保持settings.xml文件是最新的。这对于需要频繁更新依赖或者在不同网络环境下工作的开发者来说非常有用。
2024年10月13日
18 阅读
0 评论
0 点赞
2024-09-18
自动检测网络状态并在断网时重启OpenWRT路由器
在家庭网络环境中,路由器偶尔会出现断网的情况。为了避免手动重启路由器带来的不便,可以通过编写一个脚本来自动检测网络状态并在断网时重启路由器。本文将详细介绍如何在OpenWRT路由器上实现这一功能。前提条件已安装OpenWRT固件。路由器支持SSH,并且已开启SSH服务。路由器的SSH端口已知(默认为22,本文假设已修改为20022)。实现步骤1. 创建脚本首先,在OpenWRT路由器上创建一个新的脚本,用于检测网络状态并在必要时重启路由器。#!/bin/sh # 配置文件路径 CONF_LAST_DOWN_TIME="/usr/share/netcheck/last_down_time.conf" CONF_HAS_REBOOT="/usr/share/netcheck/has_reboot.conf" NETWORK_DOWN_THRESHOLD=300 # 创建配置文件如果它不存在 if [ ! -f "$CONF_LAST_DOWN_TIME" ]; then touch "$CONF_LAST_DOWN_TIME" echo "LAST_DOWN_TIME=" > "$CONF_LAST_DOWN_TIME" fi if [ ! -f "$CONF_HAS_REBOOT" ]; then touch "$CONF_HAS_REBOOT" echo "HAS_REBOOT=0" > "$CONF_HAS_REBOOT" fi # 设置要检测的目标(这里使用 www.baidu.com) PING_TARGET="www.baidu.com" # 获取当前时间戳 CURRENT_TIME=$(date +%s) # 读取配置文件中的值 source "$CONF_LAST_DOWN_TIME" source "$CONF_HAS_REBOOT" # 检查是否网络断开 if ! ping -c 1 $PING_TARGET > /dev/null 2>&1; then if [ -z "$LAST_DOWN_TIME" ]; then logger "[CK-Net] Network is down since $(date)" # 如果LAST_DOWN_TIME为空值,则记录当前时间 echo "LAST_DOWN_TIME=$CURRENT_TIME" > "$CONF_LAST_DOWN_TIME" else # 已经记录了断开时间,计算断开时间长度 NETWORK_DOWN_TIME=$((CURRENT_TIME-LAST_DOWN_TIME)) # 如果断开时间超过阈值,并且 HAS_REBOOT 为 0,则重启路由器 if [ $NETWORK_DOWN_TIME -ge $NETWORK_DOWN_THRESHOLD ] && [ $HAS_REBOOT -eq 0 ]; then # 清除断开时间记录 echo "LAST_DOWN_TIME=" > "$CONF_LAST_DOWN_TIME" logger "[CK-Net] Network has been down for more than $((NETWORK_DOWN_TIME / 60)) minutes. Restarting router..." echo "HAS_REBOOT=1" > "$CONF_HAS_REBOOT" reboot else logger "[CK-Net] Network has been down for $((NETWORK_DOWN_TIME / 60)) minutes." fi fi else # 网络恢复正常,清除断开时间记录 if [ -n "$LAST_DOWN_TIME" ]; then logger "[CK-Net] Network is up again." echo "LAST_DOWN_TIME=" > "$CONF_LAST_DOWN_TIME" echo "HAS_REBOOT=0" > "$CONF_HAS_REBOOT" fi fi2. 设置执行权限确保脚本文件具有执行权限:chmod +x /usr/share/netcheck/netcheck.sh3. 设置定时任务设置一个定时任务来定期执行这个脚本。编辑crontab:crontab -e添加定时任务:在打开的编辑器中,添加一行来指定定时任务的频率。例如,每分钟执行一次脚本:* * * * * /usr/share/netcheck/netcheck.sh保存并退出:保存并退出编辑器。此时,定时任务就已经设置好了。{dotted startColor="#ff6c6c" endColor="#1989fa"/}注意事项日志记录:您可以在脚本中加入日志记录功能,以便追踪脚本的执行情况。例如:logger "Network check script executed at $(date)"可以使用日志查看命令logread | grep CK网络延迟:考虑到网络可能存在短暂的不稳定,可以在脚本中增加重试机制,以避免因瞬时的网络波动而导致不必要的重启。例如,可以尝试多次ping,确保网络确实断开后再执行重启操作。安全性:确保路由器的SSH访问是安全的,并且只允许受信任的设备访问。频繁重启的影响:频繁重启路由器可能会对硬件造成损害,因此请调整检测间隔和重启逻辑,确保不会频繁重启。通过以上步骤,您可以在OpenWRT路由器上设置一个定时任务,定期检查网络状态,并在断网超过2分钟后自动重启路由器。这种方法可以有效地减少因短暂网络波动而导致的不必要的重启操作。
2024年09月18日
229 阅读
0 评论
0 点赞
2024-09-18
通过青龙面板脚本检测网络状态并重启路由器
在家庭网络环境中,路由器偶尔会出现断网的情况。为了避免手动重启路由器带来的不便,可以通过编写一个脚本来自动检测网络状态并在断网时重启路由器。本文将介绍如何在青龙面板上编写一个脚本来实现这一功能。前提条件已安装青龙面板。路由器支持SSH,并且已开启SSH服务。路由器的SSH端口已知(默认为22,本文假设已修改为20022)。实现步骤1. 创建脚本首先,在青龙面板中创建一个新的脚本,用于检测网络状态并在必要时重启路由器。# 检测网络状态并在断网超过2分钟时重启路由器 import time import paramiko def check_network(ip_address): import os response = os.system("ping -c 1 " + ip_address) return response == 0 def ssh_restart_router(host, username, password, port=20022): client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: client.connect(host, port=port, username=username, password=password) stdin, stdout, stderr = client.exec_command('/etc/init.d/system restart') print("Router is being restarted...") except Exception as e: print(f"Failed to connect to router: {e}") finally: client.close() def main(): router_ip = "192.168.1.1" # 路由器的IP地址 username = "root" password = "111111" ping_target = "8.8.8.8" # 可以换成任意公网IP或域名 last_down_time = None while True: if not check_network(ping_target): current_time = time.time() if last_down_time is None or (current_time - last_down_time) >= 120: print("Network is down, attempting to restart the router...") ssh_restart_router(router_ip, username, password, port=20022) last_down_time = current_time else: last_down_time = None print("Network is up.") time.sleep(60) # 每60秒检查一次 if __name__ == "__main__": main()2. 配置定时任务在青龙面板中,配置定时任务来定期执行上述脚本。例如,可以设置每5分钟执行一次。进入定时任务设置:在青龙面板的定时任务管理界面,创建一个新的定时任务。设置定时任务:设定定时任务的执行频率,例如每5分钟执行一次。选择刚刚创建的脚本作为执行对象。注意事项安全性:确保路由器的SSH访问是安全的,并且只允许受信任的设备访问。频繁重启的影响:频繁重启路由器可能会对硬件造成损害,因此请调整检测间隔和重启逻辑,确保不会频繁重启。
2024年09月18日
46 阅读
0 评论
0 点赞
2024-09-12
Electron 开发环境搭建
1. 安装 Node.js首先,我们需要确保你已经安装了 Node.js。Electron 是基于 Node.js 和 Chromium 浏览器引擎构建的。如果你还没有安装 Node.js,请前往 Node.js 官方网站 下载并安装与你操作系统匹配的最新稳定版 Node.js。安装完成后,你可以在终端或命令提示符中运行以下命令来确认 Node.js 和 npm(Node 包管理器)已经成功安装且版本正常:node -v npm -v2. 初始化 Electron 项目现在,我们来创建一个新的工作目录,例如 my-electron-app。在终端中执行以下命令:mkdir my-electron-app cd my-electron-app npm init -y这将初始化一个新的 Node.js 项目,并自动生成一个 package.json 文件。3. 安装 Electron继续在终端中执行以下命令,安装 Electron:npm install electron4. 创建主进程窗口在项目根目录下创建一个名为 main.js 的文件,作为 Electron 的主进程。在 main.js 中,你可以使用 Electron 提供的 API 来创建窗口、加载页面等。以下是一个简单的示例:// main.js const { app, BrowserWindow } = require('electron'); app.on('ready', () => { const mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true, // 允许在渲染进程中使用 Node.js }, }); // 加载你的 HTML 文件 mainWindow.loadFile('index.html'); });5. 创建渲染进程在项目根目录下创建一个名为 index.html 的文件,作为 Electron 的渲染进程。在这个文件中,你可以编写你的应用界面,使用 HTML、CSS 和 JavaScript。6. 运行应用在终端中运行以下命令,启动你的 Electron 应用:electron .这将打开一个 Electron 窗口,加载 index.html 中的内容。7. 更多功能当然,这只是一个简单的入门示例。你还可以添加更多功能,如菜单、对话框、文件操作等。如果你想开发一个 Markdown 编辑器,可以在渲染进程中使用一些流行的 Markdown 渲染库,例如 marked。祝你在 Electron 开发中玩得愉快!如果有其他问题,随时告诉我哦。🚀(Electron 官网)
2024年09月12日
25 阅读
0 评论
0 点赞
2024-09-06
Shell命令while和IFS
while IFS='=' read -r key value; do case $key in C) C="${C:-$value}" ;; ST) ST="${ST:-$value}" ;; L) L="${L:-$value}" ;; O) O="${O:-$value}" ;; OU) OU="${OU:-$value}" ;; CN) CN="${CN:-$value}" ;; emailAddress) emailAddress="${emailAddress:-$value}" ;; PKCS12Password) PKCS12Password="${PKCS12Password:-$value}" ;; esac done < <(grep -v '^#' "$INFO_FILE" | awk -F '=' '{print $1 $2}' | tr -d '[:space:]')逐行解析IFS='=':IFS (Internal Field Separator) 是 Shell 的一个环境变量,用于定义字段分隔符。设置 IFS='=' 表示将等号 = 作为字段分隔符。read -r key value:read 命令用于从标准输入中读取一行。-r 参数防止 read 命令将反斜杠 \ 解释为转义字符。key value 表示从输入行中读取两个字段,并分别赋值给 key 和 value 变量。case $key in:case 命令用于模式匹配。$key 是从输入行中读取的第一个字段(配置项的键)。;; 用于结束每个模式匹配分支。模式匹配分支:每个 ;; 前面的部分表示一个模式匹配条件。如果 $key 匹配某个模式,则执行对应的命令。"${C:-$value}":${C:-$value} 是 Shell 的参数扩展语法,表示如果 C 已经设置了值,则保留其值;否则使用 $value 的值。这种写法确保即使 $value 为空也不会覆盖已有的非空值。进程替换<(grep -v '^#' "$INFO_FILE" | awk -F '=' '{print $1 $2}' | tr -d '[:space:]'):grep -v '^#' "$INFO_FILE":grep 是一个用于文本模式搜索的工具。-v 参数表示反转选择,即显示不匹配模式的行。'^#' 是一个正则表达式,表示以 # 开头的行。"$INFO_FILE" 表示从 info.txt 文件中读取数据。整个命令的意思是从 info.txt 中过滤掉所有以 # 开头的注释行。awk -F '=' '{print $1 $2}':awk 是一个用于文本处理的工具。-F '=' 设置字段分隔符为等号 =。'{print $1 $2}' 指定输出第一个和第二个字段(即等号两边的内容)。整个命令的意思是从前面过滤出来的行中提取配置项的键和值,并去除等号。tr -d '[:space:]':tr 是一个用于翻译或删除字符的工具。-d 参数表示删除某些字符。'[:space:]' 是一个字符类,表示空白字符(包括空格、制表符等)。整个命令的意思是删除从 awk 输出的行中的所有空白字符。结合起来这段脚本的目的是从 info.txt 文件中读取配置项,并更新相应的变量。具体步骤如下:读取配置项:从 info.txt 文件中读取每一行,并去除注释行。提取每行中的键和值,并去除空白字符。解析配置项:使用 IFS='=' 将每行分割成键和值。使用 read 命令将键和值分别赋值给 key 和 value 变量。更新变量:根据键名更新相应的变量。如果变量已有值,则保留原值;否则使用新读取的值。示例假设 info.txt 文件内容如下:# 国家代码(两个字母) C=US # 省份或州 ST=California # 城市 L=San Francisco O=Nexus OU=IT CN=10.10.12.72 emailAddress=nexus@example.com # PKCS12 文件密码 PKCS12Password=mysecretpassword这段脚本会读取 info.txt 文件中的每一行,去除注释行,并更新相应的变量。最终,变量的值将如下所示:C=US ST=California L=San Francisco O=Nexus OU=IT CN=10.10.12.72 emailAddress=nexus@example.com PKCS12Password=mysecretpassword
2024年09月06日
17 阅读
0 评论
0 点赞
1
2
...
10
您的IP: