首页
关于
Search
1
HD9901-RK3399海纳思刷机包
73 阅读
2
easy-itv安装
22 阅读
3
在 Armbian 上自动下载和更新 ZIP 文件(带版本检查)
21 阅读
4
DIY HD9901(RK3399) Hinas刷机后,优化--250902
20 阅读
5
修改并编译Linux系统步骤详解:以Hinas为例
18 阅读
默认分类
Linux
Windows
幼小学作业
登录
Search
lishx
累计撰写
28
篇文章
累计收到
3
条评论
首页
栏目
默认分类
Linux
Windows
幼小学作业
页面
关于
搜索到
28
篇与
的结果
2025-10-26
降低护手霜配方成本:优化荷荷巴油比例或替换平价替代品
降低护手霜配方成本:优化荷荷巴油比例或替换平价替代品护手霜是日常护肤的热门产品,但原材料成本直接影响生产和定价。在原始配方中,荷荷巴油(10g/100g,成本约1.07 CNY,占总成本2.65 CNY的40%)是主要成本驱动因素。本文基于科学依据,提出两种降成本方案:降低荷荷巴油比例和替换为甜杏仁油,同时尽量保持保湿效果、轻薄肤感和类皮脂特性。以下为详细分析和优化配方,成本基于2025年批发市场价格(汇率1 USD ≈ 7.1 CNY,批量采购25kg+),仅含原材料,不包括生产、包装等费用。原始配方与成本分析以下是原始护手霜配方(每100g成品)及成本:成分份量 (g)成本 (CNY/100g)作用去离子水60.00.04基础溶剂,提供水分甘油5.00.05保湿剂,吸湿因子乳木果油8.00.28滋润修复,富含脂肪酸荷荷巴油10.01.07渗透保湿,类皮脂鲸蜡硬脂醇3.00.06乳化剂,稳定油水相聚山梨酯-602.00.11共乳化剂,柔滑质地蜂蜡2.00.06增稠,保护膜维生素E(生育酚)0.50.36抗氧化,延缓老化泛醇(维生素B5)2.00.28修复舒缓,促屏障修复苯氧乙醇+乙基己基甘油1.00.11防腐剂,广谱抗菌精油(柠檬+雪松)0.50.13香味舒缓,提神抗菌总计100.02.65-总成本:2.65 CNY/100g,其中荷荷巴油占比最高(40%)。目标是通过调整或替换荷荷巴油,降低成本同时保持护手霜的保湿效果和优质肤感。方案一:降低荷荷巴油比例通过减少荷荷巴油用量并增加乳木果油和水,降低成本,同时依靠乳木果油的滋润性弥补保湿效果。调整后配方(每100g)成分原配方 (g)调整后 (g)成本 (CNY/100g)作用与调整理由去离子水60.064.00.05增加4g补足总量,成本极低甘油5.05.00.05不变,廉价保湿剂乳木果油8.09.00.32增加1g增强滋润,弥补荷荷巴减少荷荷巴油10.05.00.53减少5g降低成本,仍保留部分类皮脂特性鲸蜡硬脂醇3.03.00.06不变,乳化剂聚山梨酯-602.02.00.11不变,辅助乳化蜂蜡2.02.00.06不变,保护膜维生素E(生育酚)0.50.50.36不变,抗氧化泛醇(维生素B5)2.02.00.28不变,修复舒缓苯氧乙醇+乙基己基甘油1.01.00.11不变,防腐剂精油(柠檬+雪松)0.50.50.13不变,香味舒缓总计100.0100.02.16-成本变化荷荷巴油:5g × 0.1065 CNY/g = 0.53 CNY(原1.07 CNY)。乳木果油:9g × 0.0355 CNY/g = 0.32 CNY(原0.28 CNY)。去离子水:64g × 0.00071 CNY/g = 0.05 CNY(原0.04 CNY)。总成本:2.65 - 0.54(荷荷巴节省)+ 0.04(乳木果增加)+ 0.01(水)= 2.16 CNY/100g。节省:约0.49 CNY/100g(18.5%)。优缺点优点:成本降低18%,乳木果油增强滋润效果,配方仍科学有效。缺点:荷荷巴油独特的蜡酯结构减少,肤感可能略逊;乳木果油增加可能使质地稍厚重。科学依据:乳木果油富含硬脂酸和油酸,修复皮肤屏障效果好,但流动性不如荷荷巴油,需测试涂抹感。方案二:替换荷荷巴油为甜杏仁油荷荷巴油(轻薄、类皮脂、稳定)可用更便宜的甜杏仁油(化妆品级,约40 CNY/kg)替代,成本仅为荷荷巴油的30-50%,同时保持轻薄肤感和保湿效果。调整后配方(每100g)成分原配方 (g)调整后 (g)成本 (CNY/100g)作用与调整理由去离子水60.060.00.04不变,基础溶剂甘油5.05.00.05不变,保湿剂乳木果油8.08.00.28不变,滋润修复甜杏仁油0.010.00.40替换荷荷巴油,轻薄保湿荷荷巴油10.00.00.00完全移除,降低成本鲸蜡硬脂醇3.03.00.06不变,乳化剂聚山梨酯-602.02.00.11不变,辅助乳化蜂蜡2.02.00.06不变,保护膜维生素E(生育酚)0.50.50.36不变,抗氧化泛醇(维生素B5)2.02.00.28不变,修复舒缓苯氧乙醇+乙基己基甘油1.01.00.11不变,防腐剂精油(柠檬+雪松)0.50.50.13不变,香味舒缓总计100.0100.01.98-成本变化甜杏仁油:10g × 0.04 CNY/g = 0.40 CNY(荷荷巴油原1.07 CNY)。总成本:2.65 - 1.07(荷荷巴移除)+ 0.40(甜杏仁油)= 1.98 CNY/100g。节省:约0.67 CNY/100g(25.3%)。优缺点优点:成本降低25%,甜杏仁油轻薄、类皮脂,接近荷荷巴油肤感,适合敏感肌。缺点:甜杏仁油蜡酯含量低于荷荷巴油,长期稳定性稍逊,需确保维生素E抗氧化。科学依据:甜杏仁油含60-80%油酸,渗透性好,富含维生素E/A,适合护手霜保湿需求。成本对比与推荐方案总成本 (CNY/100g)节省比例肤感影响原配方2.65-轻薄,类皮脂,优质方案一(减荷荷巴)2.1618.5%略厚重,保湿稍强方案二(甜杏仁油)1.9825.3%轻薄,略逊荷荷巴推荐:方案二(甜杏仁油),节省25%,肤感接近原配方,适合大规模生产。若追求高端质感,可用方案一或混合荷荷巴油(2g)+甜杏仁油(8g,成本约2.05 CNY/100g)。注意事项质地测试:替换或减少荷荷巴油可能影响涂抹感,建议小批量测试(50g样品)确认质地和稳定性。采购建议:甜杏仁油可从中国供应商(如阿里巴巴、华东化工)采购化妆品级(精炼),更便宜。若用高油酸葵花籽油,成本可进一步降至~1.80 CNY/100g。稳定性:甜杏仁油氧化速度略快,需确保维生素E和密封储存(避光、20°C以下)。市场定位:大众市场选方案二,性价比高;高端市场保留2-3g荷荷巴油提升卖点。法规合规:在中国生产/销售,需向国家药监局(NMPA)备案配方,确保防腐剂符合《化妆品安全技术规范》。结语通过降低荷荷巴油比例或替换为甜杏仁油,护手霜成本可从2.65 CNY/100g降至1.98-2.16 CNY,节省18-25%,同时保留保湿和轻薄肤感。方案二(甜杏仁油)性价比最高,适合规模化生产。建议小规模试制,验证质地和消费者接受度。如需供应商推荐或生产工艺指导,请留言!(成本数据基于2025年批发市场,实际价格可能因供应商或市场波动变化,建议实时询价。)
2025年10月26日
3 阅读
0 评论
0 点赞
2025-10-26
适合男士的科学护手霜配方与生产指南
适合男士的科学护手霜配方:工业化生产指南引言:男士护手霜的必要性男士的手部护理往往被忽视,但现实是,无论是体力劳动者、办公室白领还是户外爱好者,双手每天都在承受干燥、粗糙甚至龟裂的挑战。传统观念认为护手霜是“女士专属”,但现代护肤科学证明,护手霜对任何性别都有实用价值。针对男士需求,我们设计了一款科学配方,质地清爽、修复高效,并且适合化妆品工厂工业化生产。本文将详细分享配方和操作步骤,帮助你打造一款专为男士定制的护手霜。配方设计目标功效:深层保湿、修复干燥/龟裂皮肤、抗氧化,提升男士手部护理体验。质地:轻薄、不油腻,快速吸收,适合日常使用。香型:中性清新(木质或柑橘调),避免女性化花香。稳定性:加入温和防腐体系,保质期达2年。科学护手霜配方(每100g成品)成分份量 (g)作用科学依据去离子水60.0基础溶剂提供水分,优化质地。甘油5.0保湿剂吸湿因子,增强皮肤水分保留。乳木果油8.0滋润/修复富含脂肪酸和维生素E,修复角质层。荷荷巴油10.0渗透保湿类似人皮肤脂质,减少油腻感。鲸蜡硬脂醇3.0乳化剂稳定油水相,改善涂抹感。聚山梨酯-602.0共乳化剂增强乳化效果,质地柔滑。蜂蜡2.0增稠/保护形成轻薄保护膜,适合户外使用。维生素E(生育酚)0.5抗氧化保护油脂免受氧化,延缓皮肤老化。泛醇(维生素B5)2.0修复/舒缓促进皮肤屏障修复,减少炎症。苯氧乙醇 + 乙基己基甘油1.0防腐剂广谱抗菌,符合欧盟标准。精油(柠檬+雪松)0.5香味/舒缓清新调性,提神抗菌。pH目标:5.0-6.0(接近皮肤天然pH,减少刺激)。 保质期:2年(需稳定性测试验证)。生产设备与准备设备:不锈钢搅拌锅(带加热)、搅拌器(100-1000 RPM)、恒温水浴(60-80°C)、pH计、灌装机、消毒设备。准备:所有设备和容器用70%异丙醇消毒,置于无菌环境中,称量原料备用。详细操作步骤1. 水相准备(约10分钟)在不锈钢锅中加入去离子水和甘油,加热至70°C,搅拌至完全溶解。保持水浴恒温,防止过热。2. 油相准备(约15分钟)在另一锅中,加入乳木果油、荷荷巴油、鲸蜡硬脂醇、聚山梨酯-60和蜂蜡,加热至70°C,搅拌至融化并均匀。确保油相温度与水相一致,避免局部过热。3. 乳化过程(约20分钟)将油相缓慢倒入水相,同时用搅拌器以400-600 RPM搅拌。持续搅拌10-15分钟,直到冷却至40°C,呈现均匀乳白色膏体。加入维生素E、泛醇和防腐剂,搅拌均匀。4. 调整与检测(约15分钟)用pH计测试pH,必要时加入1%柠檬酸水溶液调整至5.0-6.0。滴加精油,搅拌1-2分钟,确保香味均匀。5. 冷却与灌装(约30分钟)自然冷却至30°C以下。用灌装机装入消毒瓶中,立即密封,贴上标签(生产日期、批次号、保质期)。6. 质检与储存(1-2天)取样进行稳定性测试(高温40°C、冷冻0°C循环7天)和微生物检测(<100 CFU/g)。合格后储存在15-25°C阴凉处。注意事项安全标准:苯氧乙醇≤1%,精油浓度≤0.5%,避免敏感性。批次控制:记录温度、pH和搅拌时间,确保一致性。法规合规:根据目标市场(如中国CFDA或欧盟CPNP)注册配方。产品特性与使用建议使用感:涂抹后5分钟吸收,留轻微保护膜,适合工作或运动后使用。适用场景:办公室、户外、睡前修复。建议包装:50ml黑色泵头设计,突出阳刚气质。使用方法:洗手后或睡前涂抹,每天2-3次,1周见效。结语这款护手霜配方结合了科学配比和男士需求,适合工业化生产。无论是为品牌打造新品,还是优化现有生产线,这款配方都能提供可靠的品质。如果需要调整(如添加防晒或更高浓度修复成分),欢迎进一步沟通!从今天开始,让男士的手部护理成为自信的一部分。注:配方需经专业实验室验证,生产前请咨询皮肤科专家或化妆品法规顾问。
2025年10月26日
6 阅读
0 评论
0 点赞
2025-10-25
手游党必看:长时间搓屏,手部干燥粗糙怎么破?
手游党必看:长时间搓屏,手部干燥粗糙怎么破?一、你有没有发现?手游越玩,手越 “糙” 了下班躺平开黑、周末组队冲分,手游早已成了当代年轻人的解压标配。但你大概率没注意到:每次打完几局游戏,手指尖总觉得干干的;长期下来,指腹变得粗糙,甚至偶尔会有轻微脱皮、泛红 —— 其实这不是 “错觉”,而是手游操作给手部肌肤带来的隐形损伤。二、手游党手部肌肤的 3 大 “隐形痛点”,你中了几个?指腹干燥紧绷长时间握手机,手心出汗后快速蒸发,再加上手机屏幕、壳子的 “吸水分” 效应,手部水分加速流失。尤其是高频操作的指腹,总觉得干巴巴的,握拳时甚至会有轻微紧绷感,连触摸手机屏幕都觉得 “涩”。触感粗糙起皮反复滑动、按压屏幕的摩擦,会慢慢破坏手部表层角质层。原本光滑的指腹会逐渐变得粗糙,仔细摸能感觉到纹理变深,严重时还会出现零星小脱皮,再也没有之前的细腻触感。轻微泛红刺痛连续几小时高强度操作(比如打排位赛、刷副本),手指和屏幕的反复摩擦会刺激表层肌肤。敏感肌人群可能会出现指腹轻微泛红,按压时还有隐隐的刺痛感,误以为是 “磨出茧子”,其实是肌肤在发出 “抗议”。三、护手霜:手游党的 “手部救星”,这样用才管用很多人觉得 “涂护手霜会粘屏幕,影响操作”,其实选对产品、用对方法,完全能兼顾保湿和游戏体验 —— 毕竟护手霜能精准缓解的,正是手游带来的核心肌肤问题。1. 护手霜能缓解的 3 个关键问题补水分 + 锁水分针对手游时的水分流失,护手霜中的甘油、神经酰胺等成分能快速为肌肤补水,同时在表层形成轻薄保护膜,像给手部 “穿了一层隐形防护衣”,避免越玩越干。软化粗糙角质维生素 E、泛醇等滋养成分能渗透到角质层,慢慢软化粗糙的肌肤,让指腹恢复顺滑触感,减少因摩擦导致的脱皮问题,摸起来再也不 “剌手”。舒缓摩擦刺激对于轻微泛红、刺痛,含芦荟提取物、积雪草苷的护手霜能起到舒缓作用,减轻肌肤受刺激后的不适感,帮助修复表层微小损伤。2. 手游党专属护手霜使用指南(不粘屏!不影响操作!)「使用时机」:手游前 10 分钟薄涂 1 次,提前形成保护膜;游戏结束后再补涂 1 次,集中修复几小时的摩擦损伤,避免 “干纹堆积”。「质地选择」:坚决避开厚重油腻的膏状款!优先选 “清爽型、吸收快” 的护手霜(如凝露状、轻薄乳液状),涂完 30 秒内完全吸收,不会沾到手机屏幕留下指纹。「成分优选」:基础保湿选甘油、透明质酸;修复屏障选神经酰胺、胆固醇;舒缓选芦荟、泛醇,避开香精过多、含酒精的产品,减少对敏感肌的刺激。「涂抹重点」:不用全手厚涂,重点抹指腹、指尖、虎口这三个高频操作区域,精准缓解 “压力区” 的干燥问题,节省用量还不粘手。配图建议 4:产品展示图内容:3-4 款清爽型护手霜摆放在桌面,旁边放着手机(屏幕可显示游戏图标),每款护手霜旁标注 “清爽型”“吸收快” 等关键词细节:挤出少量护手霜在指尖,展示质地(轻薄、不结块),背景简洁(白色 / 浅灰色桌面),避免杂乱元素标注:可在图下方加小字 “手游党优选:清爽不粘屏,保湿不耽误操作”四、最后想说:护肤不是 “矫情”,是对自己的小呵护手游是为了快乐,但不能让 “快乐” 以损伤肌肤为代价。对于手游党来说,护手霜不是 “可有可无” 的护肤品,而是日常必备的 “护手小工具”—— 花 10 秒薄涂,就能避免手部干燥粗糙,还能让操作时的触感更舒适(不涩手、不打滑),何乐而不为?如果不知道怎么选护手霜,也可以参考我之前整理的 “手游党护手霜清单”,按 “清爽度 + 保湿力” 分类,从平价到进阶款都有,方便直接闭眼入~你平时玩手游多久会觉得手部干燥?是打 MOBA 类游戏(操作频繁)更明显,还是玩养成类游戏(握手机时间长)更干?欢迎在评论区分享你的经历呀!配图建议 5:场景收尾图内容:中国男性涂完护手霜后,轻松坐在书桌前玩手游,手部自然搭在手机上,脸上带着放松的笑容(传递 “护肤不影响快乐” 的理念)背景:温馨的居家场景(如书桌、台灯、绿植),色调温暖,营造 “舒适解压” 的氛围细节:手部状态自然顺滑,无油光,手机屏幕可显示游戏胜利界面(增加愉悦感)(注:文档部分内容可能由 AI 生成)
2025年10月25日
6 阅读
0 评论
0 点赞
2025-10-24
男士也需要护手霜?
为什么男士也需要护手霜?打破性别刻板印象:护手霜不只是女士的专属在护肤品的世界里,护手霜常常被贴上“女性专属”的标签。许多男士一听到护手霜,脑海中可能浮现出花香包装、粉色瓶身,或者是“女士专用”的广告画面。但事实是,护手霜并不是性别专属的护理产品,男士同样需要它!无论你是程序员、健身爱好者、户外工作者,还是每天忙碌于家务的居家男士,你的双手都在承受着比你想象中更多的“磨难”。这篇文章将告诉你,为什么男士也应该关注手部护理,以及如何选择适合自己的护手霜。男士为什么需要护手霜?1. 双手的“隐形损伤”无处不在男士的双手每天都在经历各种挑战:体力劳动:建筑工人、机械师等职业会让双手长期暴露在粗糙、干燥,甚至化学物质的环境中。户外活动:登山、骑行、钓鱼等户外运动会让双手暴露在阳光、风吹、寒冷等自然环境中,导致皮肤干裂。日常习惯:频繁洗手、接触清洁剂、长时间使用键盘或工具,都会让手部皮肤失去水分,变得粗糙甚至龟裂。气候影响:尤其在秋冬季节,干燥的空气会加速手部皮肤水分流失,引起不适甚至疼痛。这些情况并非女士独有,男士的双手同样会面临干燥、粗糙、龟裂等问题。护手霜的作用是修复皮肤屏障、锁住水分、缓解不适——这些需求对任何性别都适用。2. 健康的手部皮肤是自信的体现男士可能觉得护手霜“太娘”或“没必要”,但试想一下:一双粗糙、干裂的双手在握手、递名片、甚至日常社交中,可能会无意中给对方留下不佳的印象。反之,柔软、平滑的双手不仅让人感到舒适,还能展现出你对自身细节的关注和自信。护手霜并不是“化妆品”,它更像是一种日常护理工具,就像剃须膏或洗发水一样,实用且必要。3. 男士护手的误区很多男士没有意识到自己需要护手霜,或者对护手霜有一些误解:“护手霜是女士的化妆品”:护手霜的核心功能是保湿和修复,与性别无关。市面上也有许多专为男士设计的护手霜,包装简约,气味清新或无味。“我的手没问题,不需要护理”:即使你的双手看起来“正常”,长期缺乏护理可能导致皮肤屏障受损,加速老化或引发敏感。“护手霜油腻麻烦”:现代护手霜配方已经非常先进,很多产品质地轻薄、吸收快,完全不会影响你的日常工作或运动。如何选择适合男士的护手霜?选择护手霜并不复杂,男士可以根据自己的需求和喜好来挑选:成分优先:选择含有保湿成分(如甘油、透明质酸、尿素)和修复成分(如泛醇、维生素E)的护手霜,这些成分能有效滋润和修复受损皮肤。质地清爽:男士通常不喜欢油腻感,选择质地轻薄、易吸收的护手霜,适合随时使用。气味选择:如果你不喜欢香味过重的产品,可以选择无香型或带有木质、海洋等清新气味的护手霜。使用场景:如果是户外工作者,可以选择带防晒功能或更高保湿度的护手霜;如果是办公室白领,轻薄型护手霜更适合日常使用。男士护手霜的使用小贴士适量使用:每次取黄豆大小的量,均匀涂抹在手背、手指和指缝,轻轻按摩至吸收。睡前护理:睡前涂抹一层稍厚的护手霜,可以让皮肤在夜间得到深度修复。随身携带:选择小包装的护手霜,方便放在口袋或背包中,随时补涂。配合手部清洁:洗手后及时涂抹护手霜,能更好地锁住水分。结语:护手霜,男士的隐形“装备”护手霜不是“女士专属”,它是你双手的“隐形铠甲”,能帮助你应对日常生活的各种挑战。无论是为了保护双手健康,还是提升个人形象,男士都有理由将护手霜纳入日常护理清单。试着给你的双手一点关爱,你会发现,这个小小的改变能带来意想不到的舒适和自信!所以,男士们,放下对护手霜的偏见,拿起一管适合自己的护手霜,从今天开始,给你的双手应有的呵护吧!
2025年10月24日
7 阅读
0 评论
0 点赞
2025-10-23
在 Armbian 上自动下载和更新 ZIP 文件(带版本检查)
在 Armbian 上自动下载和更新 ZIP 文件(带版本检查)本文介绍如何在 Armbian(基于 Debian 的嵌入式系统)上设置一个自动化脚本,通过定时任务每晚 2:30 检查并下载指定的 ZIP 文件(来自 JSON 配置),并通过版本检查避免重复下载相同的文件。我们以 https://www.252035.xyz/p/jsm.json 中的 ZIP 链接为例,解决 DNS 问题、缓存问题,并使用 GitHub 下载加速前缀。背景目标是从 JSON 文件(https://www.252035.xyz/p/jsm.json)中提取 ZIP 下载链接(例如 https://gh.llkk.cc/https://raw.githubusercontent.com/fish2018/PG/main/pg.20251016-1619.zip),并确保:使用固定文件名(current_pg.zip)保存下载文件。将版本信息(例如 20251016-1619)保存到单独文件(version.txt)。仅当版本更新时下载,避免重复下载。使用加速前缀(如 https://git.lishx.dpdns.org/)解决下载问题。防止缓存导致获取旧版本。环境准备1. 系统要求操作系统:Armbian(基于 Debian Bookworm 或类似版本)。Python:Python 3(通常预装,检查:python3 --version)。依赖:requests 库。工具:cron 用于定时任务。2. 安装依赖由于 Debian 启用 PEP 668(外部管理环境),直接使用 pip 安装可能报错。推荐通过 apt 安装 requests:apt-get update apt-get install python3-requests验证:python3 -c "import requests; print(requests.__version__)"替代方案(虚拟环境):如果需要特定版本的 requests:python3 -m venv /opt/zip_updater/venv source /opt/zip_updater/venv/bin/activate pip install requests实现脚本以下是核心脚本,保存为 /opt/zip_updater/update_zip.py:#!/usr/bin/env python3 import requests import json import os import re from datetime import datetime # 配置 JSON_URL = "https://www.252035.xyz/p/jsm.json" TARGET_DIR = "/opt/zip_updater/downloads/" CURRENT_ZIP = os.path.join(TARGET_DIR, "current_pg.zip") VERSION_FILE = os.path.join(TARGET_DIR, "version.txt") LOG_FILE = os.path.join(TARGET_DIR, "update.log") ACCELERATE_PREFIX = "https://git.lishx.dpdns.org/" # GitHub 加速前缀 def log_message(message): """记录日志""" timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") with open(LOG_FILE, "a", encoding="utf-8") as f: f.write(f"[{timestamp}] {message}\n") print(f"[{timestamp}] {message}") def ensure_dir(directory): """确保目录存在""" os.makedirs(directory, exist_ok=True) def get_zip_url(): """从 JSON 中提取 ZIP URL,禁用缓存""" try: headers = {"Cache-Control": "no-cache", "Pragma": "no-cache"} response = requests.get(JSON_URL, timeout=10, headers=headers) response.raise_for_status() data = response.json() for site in data.get("sites", []): if site.get("key") == "https://github.com/fish2018/PG": zip_url = site.get("zip") if zip_url: return zip_url return None except Exception as e: log_message(f"获取 JSON 或提取 URL 失败: {e}") return None def get_direct_github_url(zip_url): """从 gh.llkk.cc URL 提取原始 GitHub URL""" if "gh.llkk.cc" in zip_url: match = re.search(r'https://raw\.githubusercontent\.com/fish2018/PG/main/pg\.\d{8}-\d{4}\.zip', zip_url) if match: return match.group(0) return None def get_version_from_url(zip_url): """从 URL 提取版本号""" match = re.search(r'pg\.(\d{8}-\d{4})\.zip', zip_url) return match.group(1) if match else None def read_current_version(): """读取当前版本号""" if os.path.exists(VERSION_FILE): with open(VERSION_FILE, "r", encoding="utf-8") as f: return f.read().strip() return None def save_version(version): """保存版本号到文件""" with open(VERSION_FILE, "w", encoding="utf-8") as f: f.write(version) def is_newer_zip(zip_url): """检查 ZIP 是否需要更新(基于版本文件)""" new_version = get_version_from_url(zip_url) if not new_version: log_message("无法解析 ZIP URL 日期,强制下载") return True, "无法解析 URL 日期" current_version = read_current_version() if current_version is None: return True, "无现有版本信息" if new_version == current_version: return False, f"版本 {new_version} 未变化" try: new_date = datetime.strptime(new_version, "%Y%m%d-%H%M") current_date = datetime.strptime(current_version, "%Y%m%d-%H%M") if new_date > current_date: return True, f"发现新版本 {new_version}" return False, f"当前版本 {current_version} 已是最新" except ValueError: log_message("日期解析失败,强制下载") return True, "日期解析失败" def download_zip(zip_url, output_path, max_retries=3): """下载 ZIP,支持重定向、加速前缀和防缓存""" urls_to_try = [] direct_url = get_direct_github_url(zip_url) if direct_url: urls_to_try.append(ACCELERATE_PREFIX + direct_url) # 优先尝试加速 URL urls_to_try.append(zip_url) # 后尝试原始 URL headers = {"Cache-Control": "no-cache", "Pragma": "no-cache"} for attempt in range(max_retries): for url in urls_to_try: try: log_message(f"尝试下载: {url}") response = requests.get(url, timeout=30, stream=True, allow_redirects=True, headers=headers) response.raise_for_status() total_size = int(response.headers.get("content-length", 0)) downloaded = 0 with open(output_path, "wb") as f: for chunk in response.iter_content(chunk_size=8192): if chunk: f.write(chunk) downloaded += len(chunk) if total_size > 0: percent = (downloaded / total_size) * 100 print(f"下载进度: {percent:.1f}%") log_message(f"下载成功: {url} -> {output_path}") return True except requests.exceptions.RequestException as e: log_message(f"尝试 {attempt + 1} 失败 ({url}): {e}") if attempt == max_retries - 1 and url == urls_to_try[-1]: log_message("所有 URL 尝试失败") return False return False def main(): """主函数:检测并更新""" ensure_dir(TARGET_DIR) log_message("开始检测 ZIP 更新...") zip_url = get_zip_url() if not zip_url: log_message("未找到 ZIP URL,退出") return log_message(f"检测到 ZIP URL: {zip_url}") should_download, reason = is_newer_zip(zip_url) log_message(f"版本检查: {reason}") if not should_download: log_message("跳过下载") return version = get_version_from_url(zip_url) if not version: log_message("无法获取版本号,使用默认文件名") log_message("准备下载新 ZIP...") if download_zip(zip_url, CURRENT_ZIP): if version: save_version(version) log_message(f"保存版本号: {version}") log_message("更新完成") else: log_message("更新失败") if __name__ == "__main__": main()脚本功能:固定文件名:下载的 ZIP 保存为 /opt/zip_updater/downloads/current_pg.zip。版本存储:版本号(如 20251016-1619)保存到 /opt/zip_updater/downloads/version.txt。版本检查:比较 JSON 中的版本与 version.txt,仅当版本更新时下载。加速前缀:优先使用 https://git.lishx.dpdns.org/ 下载,解决 gh.llkk.cc DNS 问题。防缓存:使用 Cache-Control: no-cache 确保获取最新 JSON。日志:记录版本检查、下载进度和结果。保存和权限:chmod +x /opt/zip_updater/update_zip.py测试脚本:python3 /opt/zip_updater/update_zip.py检查 /opt/zip_updater/update.log、version.txt 和 current_pg.zip。设置定时任务1. 配置 cron以 root 用户设置每晚 2:30 执行:crontab -e添加:30 2 * * * /usr/bin/python3 /opt/zip_updater/update_zip.py >> /opt/zip_updater/cron.log 2>&1虚拟环境(如果使用):30 2 * * * /opt/zip_updater/venv/bin/python /opt/zip_updater/update_zip.py >> /opt/zip_updater/cron.log 2>&12. 验证 croncrontab -l临时测试(每分钟运行):* * * * * /usr/bin/python3 /opt/zip_updater/update_zip.py >> /opt/zip_updater/cron.log 2>&1检查 /opt/zip_updater/cron.log 和 update.log。3. 确认时区timedatectl如需设置为 Asia/Shanghai:dpkg-reconfigure tzdata验证和调试1. 测试版本检查模拟现有版本:echo "20251016-1619" > /opt/zip_updater/downloads/version.txt touch /opt/zip_updater/downloads/current_pg.zip python3 /opt/zip_updater/update_zip.py日志应显示“版本 20251016-1619 未变化,跳过下载”。2. 测试下载检查 JSON:curl -H "Cache-Control: no-cache" https://www.252035.xyz/p/jsm.json测试加速 URL:curl -L -H "Cache-Control: no-cache" -o test.zip https://git.lishx.dpdns.org/https://raw.githubusercontent.com/fish2018/PG/main/pg.20251016-1619.zip3. 日志检查/opt/zip_updater/update.log:记录版本检查、下载进度和结果。/opt/zip_updater/cron.log:记录 cron 输出。故障排除仍下载旧版本:检查 version.txt:cat /opt/zip_updater/downloads/version.txt。确认 JSON:curl -H "Cache-Control: no-cache" https://www.252035.xyz/p/jsm.json。如果源站未更新,访问 https://github.com/fish2018/PG/main/ 确认最新文件名。DNS 问题:nslookup git.lishx.dpdns.org echo "nameserver 8.8.8.8" | tee -a /etc/resolv.conf缓存问题:确保脚本使用 Cache-Control: no-cache。测试加速 URL:curl -v -H "Cache-Control: no-cache" https://git.lishx.dpdns.org/....扩展功能1. 文件校验添加 MD5 校验:import hashlib def verify_zip(file_path): with open(file_path, "rb") as f: return hashlib.md5(f.read()).hexdigest() # 在 download_zip 后调用 log_message(f"ZIP MD5: {verify_zip(CURRENT_ZIP)}")2. 邮件通知安装 mailutils:apt-get install mailutils在 main() 末尾:if should_download and download_zip(zip_url, CURRENT_ZIP): os.system(f'echo "ZIP 更新完成: {version}" | mail -s "ZIP 更新通知" your_email@example.com') elif not should_download: os.system(f'echo "ZIP 版本未变化: {reason}" | mail -s "ZIP 更新通知" your_email@example.com')总结通过以上步骤,你可以在 Armbian 上实现每晚 2:30 自动检查和下载 ZIP 文件,固定保存为 current_pg.zip,版本信息存储在 version.txt,并在版本未变时跳过下载。脚本处理了 DNS 问题(gh.llkk.cc)、缓存问题,并优先使用加速前缀,确保稳定运行。如需进一步优化或调试,请检查日志或提供反馈!
2025年10月23日
21 阅读
0 评论
1 点赞
1
2
...
6