tag:blogger.com,1999:blog-33003218504154814352024-03-23T18:15:28.156+08:00Genero和它的朋友们在此记录Genero、Linux、Windows及Tiptop ERP相关的技术资料,有时可能会有点工作上的琐事……Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.comBlogger229125tag:blogger.com,1999:blog-3300321850415481435.post-76167718831983636122024-01-25T08:44:00.001+08:002024-01-25T08:44:52.091+08:00SQL Server审计功能使用示例<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxa25MhVA6A_7aY8MgG9GwqjP_yTbhdYSfkFLt1Pz2-i27MiYccHvfLMuO231OcPnTIbbNJyPsLi8dRuNqOqUj-HvFdWetdzJkJmTZo_wEvBP-WdoKyBsGjZGUIZeQ6a06Ws_kXZ0lLGbwWOIUjWsXRUsd-DKcjA0mYsNUdcPBWcxSyBLujiwoFM8lCwQ/s833/AUDIT.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="498" data-original-width="833" height="191" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxa25MhVA6A_7aY8MgG9GwqjP_yTbhdYSfkFLt1Pz2-i27MiYccHvfLMuO231OcPnTIbbNJyPsLi8dRuNqOqUj-HvFdWetdzJkJmTZo_wEvBP-WdoKyBsGjZGUIZeQ6a06Ws_kXZ0lLGbwWOIUjWsXRUsd-DKcjA0mYsNUdcPBWcxSyBLujiwoFM8lCwQ/s320/AUDIT.jpg" width="320" /></a></div><br /><p>目的:监控普通用户对数据库的非SELECT操作</p><p>操作步骤:</p><blockquote><p>--1. 创建审计,来监控对数据库的所有操作</p><p>--GUI操作方法:在数据库实例下--安全性--审计--新建审核</p><p>USE [master]</p><p>GO</p><p>CREATE SERVER AUDIT [<i>AuditLog</i>]</p><p>TO FILE </p><p>(<span style="white-space: pre;"> </span>FILEPATH = N'<i>E:\SQLAuditLog</i>'</p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>,MAXSIZE = <i>1 GB</i></span></p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>,MAX_ROLLOVER_FILES = 2147483647</span></p><p><span style="white-space: normal;"><span style="white-space: pre;"> </span>,RESERVE_DISK_SPACE = OFF</span></p><p>) WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE)</p><p>GO</p><p>--完成后在GUI界面右键,启用审核。</p></blockquote><p><br /></p><blockquote><p>--2. 对应数据库下创建审核规范</p><p>--GUI操作方法:对应数据库-安全性-数据库审核规范--右键新建数据库审核规范</p><p>USE [<i>TESTDB</i>]</p><p>GO</p><p>CREATE DATABASE AUDIT SPECIFICATION [<i>DatabaseAuditSpecification-20240124-143021</i>]</p><p>FOR SERVER AUDIT [<i>AuditLog</i>]</p><p>ADD (INSERT, UPDATE, DELETE ON DATABASE::[<i>TESTDB</i>] BY [<i>it</i>]),</p><p>ADD (INSERT, UPDATE, DELETE ON DATABASE::[<i>TESTDB</i>] BY [<i>max</i>])</p><p>GO</p></blockquote><p><br /></p><blockquote><p>--3. 查询审核日志</p><p>--GUI方法:数据库实例-安全性-审核-右键此前创建的审核-查看审核日志</p><p>SELECT event_time,action_id,succeeded,session_id,session_server_principal_name,object_name,statement,file_name,audit_file_offset</p><p>FROM sys.fn_get_audit_file('<i>E:\AduitLog\Audit-20240119-091132_3B8B4864-F6A0-48A9-9964-58FA24A6E096_0_133501004286830000.sqlaudit</i>',DEFAULT,DEFAULT) </p><p>ORDER BY 1 DESC; </p></blockquote><p>代码说明:斜体字可根据实际情况调整</p><p>未解决问题:日志中存在sa的相关操作记录,导致日志文件很大。</p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-75058050717543544922023-08-20T19:56:00.012+08:002023-08-21T18:08:47.821+08:00Holy crap!是什么意思?<p> "holy crap"是一种略显粗俗的感叹词,表示惊讶。</p><p>从语言学角度看,这里有几件事。"crap"是 "shit"的一个不太粗俗的替代词。也就是字面上的粪便或排便行为。</p><p>至于"holy"的部分,那是早期宗教时代遗留下来的。几个世纪前,基督教在英语社会的日常生活中更为突出。亵渎神明或"亵渎主的圣名"可能会引起冒犯--这也是发誓的意义之一。因此,不礼貌的感叹词会使用宗教术语:"Holy Christ!" "Holy Mother of God"。今天的社会更加世俗化,宗教色彩越来越淡。所以,说 "Damn"是一种温和的蔑称,不会引起人们的注意。今天令人反感的不是滥用宗教术语,而是粗俗。因此,在 "holy shit"这样的结构中,英语保留了形式(以 "holy"开头),但用粗俗的词语取代了另一个宗教词语。因此,"holy crap"将被视为"minced oath"。也就是说,它用一个温和的形容词代替了强烈的形容词,就像用 "gosh darn"代替了"God damn"。</p><p></p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-19060257637002242262023-08-11T06:28:00.005+08:002023-09-13T14:56:13.511+08:00用批处理文件监控程序运行状况,不运行时自动发邮件通知。<p>我有个长驻内存的程序,有时候会自动停止运行,本来想用批处理监控它并自动启动的,但一直失败,只能手动双击exe文件启动,所以迫不得已只能监测到停止时自动发邮件了。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTde9v8FCpgFH8cIsLjkru_R1y1FT5ePBJhNw2OSajwEuvB-rCND3ZsLfWWHVuJdJauWoxgyBcv8Defxbo2E_jGBUOwM3PW1SQoZkOLiWJvlVOQ8OZzoCQJdEBEacr7_difmPkUOW9mdBhlvEx1G1S7exbCfDaV1BV_YhmE02zqTP4krPXDrDAaUVqlE0/s413/BAT_Files.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="388" data-original-width="413" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTde9v8FCpgFH8cIsLjkru_R1y1FT5ePBJhNw2OSajwEuvB-rCND3ZsLfWWHVuJdJauWoxgyBcv8Defxbo2E_jGBUOwM3PW1SQoZkOLiWJvlVOQ8OZzoCQJdEBEacr7_difmPkUOW9mdBhlvEx1G1S7exbCfDaV1BV_YhmE02zqTP4krPXDrDAaUVqlE0/s320/BAT_Files.png" width="320" /></a></div><p></p><p>好了,宝子们,上代码!😄 <br /></p><p>检测程序运行状况的批处理文件xxx.bat的内容: <br /></p><blockquote><p style="text-align: left;">tasklist | find /i "autotask.exe" && echo "It is running" || "D:\sendmail.bat" <br /></p></blockquote><p>发送邮件的批处理文件sendmail.bat的内容:</p><blockquote><p>echo set sh=WScript.CreateObject("WScript.Shell") >tmp.vbs<br />rem 停顿0.3s<br />echo WScript.Sleep 300 >>tmp.vbs<br />rem 下面的服务器地址替换成自己的,端口我只测了25<br />echo sh.SendKeys "open mail.domain.com 25{ENTER}" >>tmp.vbs<br />echo WScript.Sleep 1000 >>tmp.vbs<br />echo sh.SendKeys "helo abc{ENTER}" >>tmp.vbs<br />echo WScript.Sleep 300 >>tmp.vbs<br />rem 应该还要认证的,但我的服务器做了免认证,所以略过了。请自行Google吧。<br />rem 发件人<br />echo sh.SendKeys "mail from:<sender@domain.com>{ENTER}" >>tmp.vbs<br />echo WScript.Sleep 300 >>tmp.vbs<br />rem 收件人<br />echo sh.SendKeys "rcpt to:<yourname@domain.com>{ENTER}" >>tmp.vbs<br />echo WScript.Sleep 300 >>tmp.vbs<br />echo sh.SendKeys "data{ENTER}" >>tmp.vbs<br />rem 邮件头中的发件人和收件人<br />echo sh.SendKeys "from:sender@domain.com{ENTER}" >>tmp.vbs<br />echo sh.SendKeys "to:yourname@domain.com{ENTER}" >>tmp.vbs<br />cho WScript.Sleep 300 >>tmp.vbs<br />rem 邮件主题<br />echo sh.SendKeys "subject:AutoTask is not running{ENTER}{ENTER}" >>tmp.vbs<br />echo WScript.Sleep 300 >>tmp.vbs<br />rem 邮件内容,可多行。<br />echo sh.SendKeys "Here is the first line of your message body.{ENTER}" >>tmp.vbs<br />echo sh.SendKeys "Here is the second line of your message body.{ENTER}" >>tmp.vbs<br />rem 用一个点(.)结束邮件<br />echo sh.SendKeys ".{ENTER}" >>tmp.vbs<br />start telnet<br />rem 执行vbs文件,发送邮件。<br />cscript //nologo tmp.vbs<br />rem 清空vbs文件<br />echo sh.SendKeys "{ENTER}" >tmp.vbs<br /></p></blockquote>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-53547247394658703422023-08-02T13:35:00.004+08:002023-08-02T13:35:58.115+08:00将.exe文件注册为windows服务时的"坑"<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7aPNEHVXNGu8Omo-fKL82MJrz65Jbkh2uiwJWZdafQbqDVNjPZjbj0jaRlO5weN8XIlVNSx54kaicjsz3J-LoQdrnuWCywHwLyjEgw-E0_TfKIxM3feTirqBiQk5Na9TUHg1UgGC_ju1NxFwKX35i851CHSDwrp6mWlaS6By9Tem8tO2VF9CzrNet1mw/s201/WindowsService.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="192" data-original-width="201" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7aPNEHVXNGu8Omo-fKL82MJrz65Jbkh2uiwJWZdafQbqDVNjPZjbj0jaRlO5weN8XIlVNSx54kaicjsz3J-LoQdrnuWCywHwLyjEgw-E0_TfKIxM3feTirqBiQk5Na9TUHg1UgGC_ju1NxFwKX35i851CHSDwrp6mWlaS6By9Tem8tO2VF9CzrNet1mw/s1600/WindowsService.png" width="201" /></a></div>为了让.exe命令能像服务一样在未登录Windows时自动启动,我们可以将符合服务规范的.exe文件注册为windows服务,使用的命令是sc,具体使用方法在网上有很多,就不赘述了。但sc命令中的坑需要记录一下:=(等号)前面不能有空格,而=(等号)后面必须有一个空格,切记!<p></p><p>另外,要以管理员的身份打开命令行。 <br /></p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-44965725549070309702023-07-28T07:03:00.001+08:002023-07-28T07:03:00.149+08:00SQL Server从BAK备份文件还原到新数据库<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDHuVbqT-FL9NWMI8U5lkYr-IHkKFGMkPRhJmQUsRRTMi_4BGZIYBkitf-BFvIhMvPhAKgFCctZjxQYxasmpcYzttSjgIEuP70XWdv9YrsxqnallL50NplJtS97ojyeMvzrZ1TA-DKZaFiEWJI-UW4WF15AMHieXDkbMCvtgV5XFU_tyKs7CLbH9hh57k/s607/restore.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="445" data-original-width="607" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDHuVbqT-FL9NWMI8U5lkYr-IHkKFGMkPRhJmQUsRRTMi_4BGZIYBkitf-BFvIhMvPhAKgFCctZjxQYxasmpcYzttSjgIEuP70XWdv9YrsxqnallL50NplJtS97ojyeMvzrZ1TA-DKZaFiEWJI-UW4WF15AMHieXDkbMCvtgV5XFU_tyKs7CLbH9hh57k/s320/restore.png" width="320" /></a></div>USE [master]<br />restore database [Db_TEMP] <i>--新的数据库名称</i><br />from disk = 'D:\BACKUP\Db_backup.bak' <i>--备份文件所在位置</i><br />with nounload, replace, stats = 10,<br />MOVE N'Db' to N'D:\temp\Db_TEMP.mdf', <i>--MOVE后的Db是逻辑名称,To后面的是文件存放的物理位置。</i><br />MOVE N'Db_log' to N'D:\temp\Db_TEMP.ldf' <i>--同上,逻辑名称可以通过RESTORE FILELISTONLY from disk = 'D:\BACKUP\Db_backup.bak'查到,在结果的第1列。</i><br />GO<p></p><p> 上面的<b>逻辑名称</b>很重要,否则会提示“逻辑文件 'xxx' 不是数据库 'xxx' 的一部分” 这样的错误。<br /></p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-90399506157337555522023-07-27T17:10:00.002+08:002023-07-27T17:10:46.463+08:00SQL Server 查询表占用空间大小的语句<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijTnNufDYVrRzKM-O176NXlTIp2mKQsTCuhYW6iDCb3q_LDYNqeJ6LqQEZbqO9x7JTbYmHF1wBzJLIVO5_Ka6ZM-49RJ9eroZYfFuoDSwj7mX5MlvTena5UVcS6LYcX5luG_BSoaDdA1lDFn4YcRPTdSO4FaB0WF8gK0R14ky013qr5h0WbgHpn2LtoDY/s506/sql.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="506" data-original-width="501" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijTnNufDYVrRzKM-O176NXlTIp2mKQsTCuhYW6iDCb3q_LDYNqeJ6LqQEZbqO9x7JTbYmHF1wBzJLIVO5_Ka6ZM-49RJ9eroZYfFuoDSwj7mX5MlvTena5UVcS6LYcX5luG_BSoaDdA1lDFn4YcRPTdSO4FaB0WF8gK0R14ky013qr5h0WbgHpn2LtoDY/s320/sql.png" width="317" /></a></div>--表占用空间情况<br />SELECT db_name() as DbName,<br /> t.NAME AS TableName,<br /> s.Name AS SchemaName,<br /> p.rows AS RowCounts,<br /> SUM(a.total_pages) * 8 AS TotalSpaceKB, <br /> CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS 总共占用空间MB,<br /> SUM(a.used_pages) * 8 AS UsedSpaceKB, <br /> CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB, <br /> (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,<br /> CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB<br />FROM <br /> sys.tables t<br />INNER JOIN <br /> sys.indexes i ON t.OBJECT_ID = i.object_id<br />INNER JOIN <br /> sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id<br />INNER JOIN <br /> sys.allocation_units a ON p.partition_id = a.container_id<br />LEFT OUTER JOIN <br /> sys.schemas s ON t.schema_id = s.schema_id<br />WHERE <br /> t.NAME NOT LIKE 'dt%' <br /> AND t.is_ms_shipped = 0<br /> AND i.OBJECT_ID > 0<br />GROUP BY <br /> t.Name, s.Name, p.Rows<br />ORDER BY <br /> 总共占用空间MB desc <br /><p></p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-3963097026783807162022-12-11T13:32:00.010+08:002022-12-12T13:40:52.797+08:00避免Windows电脑自动锁屏<div><p>应公司的信息安全政策要求,域的组策略设定了电脑5分钟不操作,自动锁屏。但有时候又不得不一直开着,比如要请别人远程协助时,于是找到了下面的方法。</p><p>ps:仅适用于Windows操作系统。</p>1. 将如下代码保存为html文件,且保存在本地磁盘;<blockquote><p> <html><br /> <head><br /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><br /> <title>I need you still work!</title><br /> </head><br /> <body bgcolor="#215E21"><br /> <script type="text/javascript"><br /> function PressKey(){<br /> var objWs = new ActiveXObject("Wscript.Shell");<br /> objWs.SendKeys("{SCROLLLOCK}");<br /> }<br /> setInterval("PressKey()",60000);//按下按键的间隔时间。<br /> </script><br /> </body><br /></html></p></blockquote>2. 用Internet Explorer打开该文件;(ps: Win10若默认浏览器是Edge,可在菜单中找到用IE打开)<br /></div><p>3. 在IE中选择“允许被阻止的内容”,稍等片刻,允许ActiveX控件交互。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSJNiefWi0TDqE96eDyJ-tbv_7eBt__DU0_nCOjucokmuXa9DgBirz3LM23tQR_z01ouOWLqP6LMOr3ivXeYjVnZe0tvOBhKC0VAjkT52-gW_9kWVDYZNfl3t3qgkhjMNS6IXpzDYuNz45DNNR-IDfJBpjWHO28oUu3UxPLo0VySmpETuFy94FlzBw/s340/ActiveX.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="139" data-original-width="340" height="164" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSJNiefWi0TDqE96eDyJ-tbv_7eBt__DU0_nCOjucokmuXa9DgBirz3LM23tQR_z01ouOWLqP6LMOr3ivXeYjVnZe0tvOBhKC0VAjkT52-gW_9kWVDYZNfl3t3qgkhjMNS6IXpzDYuNz45DNNR-IDfJBpjWHO28oUu3UxPLo0VySmpETuFy94FlzBw/w400-h164/ActiveX.png" width="400" /></a></div><p></p><p><span style="font-size: x-small;">参考文章:<a href="https://blog.csdn.net/zhusongziye/article/details/79704546" target="_blank">魔都飘雪</a></span><br /></p><p><br /></p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-16457780369113387662022-10-14T19:56:00.003+08:002022-10-14T19:56:00.195+08:00从VirtualBox迁移虚拟机到Hyper-V<p>Hyper-V不支持直接导入VirtualBox的虚拟机,所以要“曲线救国”了。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMbjsYn7ezSisI3QvDL1DrQOrQeclsTs1OPn1aduoHOv1qIL2y4Xflk42HMsPp6XBpfNCKOyt5Dr8NIVea0rGt20l9Cnpz-tXjPF4O31iNETlsKrWs49NeI_EMFo6ks_wZ1Orq7A_fu17Jt0nnOlsvCnfF4yxdGtYOfJJ0bSvJrXbnGY1SFgOW6I6n/s800/Buiobuione_Vancouver_Multicultural.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="533" data-original-width="800" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMbjsYn7ezSisI3QvDL1DrQOrQeclsTs1OPn1aduoHOv1qIL2y4Xflk42HMsPp6XBpfNCKOyt5Dr8NIVea0rGt20l9Cnpz-tXjPF4O31iNETlsKrWs49NeI_EMFo6ks_wZ1Orq7A_fu17Jt0nnOlsvCnfF4yxdGtYOfJJ0bSvJrXbnGY1SFgOW6I6n/s320/Buiobuione_Vancouver_Multicultural.jpg" width="320" /></a></div><br /> 首先从VB导出虚拟机为ova格式,然后将ova文件用7zip解压出来,再用<a href="https://www.starwindsoftware.com/" rel="nofollow" target="_blank">StarWind</a>提供的工具<a href="https://www.starwindsoftware.com/converter" rel="nofollow" target="_blank">V2V Image Converter</a>将ova文件转换为中间格式,就能导入到Hyper-V了。在Hyper-V中要选择新建虚拟机,在硬盘配置阶段将刚刚通过V2V Image Converter转换出来的文件附加上去,就可以了。<p></p><p>我的Guest机是Ubuntu系统,启动后发现网卡不能接入,用ip a命令查看,显示为noop state DOWN,原来是网卡“硬件”变了,需要调整/etc/netplan/00-installer-config.yaml文件,将其中的网卡名称调整即可,我的是从ens160调整为eth0,重启就OK了。</p><p>参考内容:<a href="https://www.groovypost.com/howto/migrate-virtual-box-vms-windows-10-hyper-v/" rel="nofollow" target="_blank">How to Migrate VirtualBox VMs to Windows 10 Hyper-V</a><br /></p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-61439795676050030852022-03-08T21:55:00.009+08:002022-03-09T14:15:42.627+08:00把绿色程序添加到elementary OS 6的程序列表<ol style="text-align: left;"><li>直接右键运行程序;</li><li>用mount命令找到临时路径,将.png格式的icon文件和.desktop文件分别复制到~/.icons和~/.local/share/applications中;</li><li>修改.desktop文件中的Exec为对应路径,Icon为图标文件png(不含路径和后缀);</li><li>在桌面左上角的Applications中验证一下吧。</li></ol><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiIuhBVDft87xJ2nmQn0tB1juI9Ij_N8OqTHCZkIeJ-PoPErUcFOACk77-1P-_BVyRlhbdGWGfAdVZJoYvQGrnUYwEzDvTRly0YtqvGSTl8u6yr7VcH4filBnPv-Qq9MgPTo2QjefzFmZw3uo59AKQ2CPeX3vM2TrFgiy6gFX9UjiDBWxJNNPeXao3L=s605" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="314" data-original-width="605" height="166" src="https://blogger.googleusercontent.com/img/a/AVvXsEiIuhBVDft87xJ2nmQn0tB1juI9Ij_N8OqTHCZkIeJ-PoPErUcFOACk77-1P-_BVyRlhbdGWGfAdVZJoYvQGrnUYwEzDvTRly0YtqvGSTl8u6yr7VcH4filBnPv-Qq9MgPTo2QjefzFmZw3uo59AKQ2CPeX3vM2TrFgiy6gFX9UjiDBWxJNNPeXao3L=s320" width="320" /></a></div><br />参考内容:https://linuxconfig.org/how-to-create-an-integrated-application-launcher-for-an-appimage-file-in-ubuntu<br /><p></p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-5275744485368429072021-11-15T20:36:00.002+08:002021-11-15T20:36:00.176+08:00虽然赚钱很重要,但……<p>心理学家斯达西·亚当斯曾提出过“公平理论”,是指员工会根据自己的投入与产出结果进行比较,如果结果是好的,他们就不会在意过程细节。反之,若是产出结果不理想,员工就倾向于用回顾流程细节的办法,判断整个过程是否公平。如今的中国员工,从小到大的成长环境,恰巧赶上了国内教育、物质、精神资源较为富足的时代,他们不缺那些条件,所以就更为在意凡事是否公平。</p><p>这种现象落在实处,分为三种维度:</p><p>首先是<b>分配公平</b>,管理者给员工分任务,或者分东西,要是大家平均都差不多,这没毛病。如果谁多谁少,此时就有必要进行解释,讲出理由和依据。</p><p>其次是<b>信息公平</b>,管理者能掌握比员工更多的信息,这没毛病。可一件事,若是只告诉了团队中某位员工,剩下不知情的年轻人,就会觉得自己被孤立。世上没有不透风的墙,管理者要么就都不透露,要透露就全都知一声。</p><p>最后是<b>人际公平</b>,针对一个问题,管理者批评员工,这没毛病。可要是同样的问题,你对这个言辞激烈,对那个柔声细语,这毛病就大了。人无完人,谁都会犯错。如果管理者不能在揭示问题上一视同仁,大搞区别对待,必然会让其他员工寒心。而对于渴望被尊重的诉求,是管理者需要给员工一个表达自我的机会。</p><p style="text-align: right;">-- 摘自LinkedIn 今日必读 <br /></p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com1tag:blogger.com,1999:blog-3300321850415481435.post-90367826281332617332021-11-09T20:05:00.002+08:002021-11-09T20:05:00.190+08:00给boot分区瘦身<p>Elementary OS 6 Odin 安装时让系统自己分配分区大小,导致/boot分区太小了,每次更新完后就提示空间不足。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwP2sd7prKoJyWJi6LJJPKGjMYW23KBFY0Q8TSY_dHluh1rIg7hbrQhN_ZGp_RimPI0i34GW5OyKZ1e4TmS-yVWHyHDB_K1Bq2ppG270DAHgLt-X3jeszbs_AePTC5XO_bAfYuGTUc6yU/s413/Odin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="413" data-original-width="365" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwP2sd7prKoJyWJi6LJJPKGjMYW23KBFY0Q8TSY_dHluh1rIg7hbrQhN_ZGp_RimPI0i34GW5OyKZ1e4TmS-yVWHyHDB_K1Bq2ppG270DAHgLt-X3jeszbs_AePTC5XO_bAfYuGTUc6yU/s320/Odin.png" width="283" /></a></div>按下述方法可以临时解决,长远看还是重新分区、重装系统吧。<br /><p></p><ol style="text-align: left;"><li>查看/boot分区的大小,记录大小用于完成后对比;<br /><blockquote>df -h</blockquote></li><li>查看当前内核版本<br /><blockquote>uname -r</blockquote></li><li>列出/boot目录下所有内核对应的文件<br /><blockquote>ls -1 /boot</blockquote></li><li>列出当前系统上的所有内核<br /><blockquote>dpkg -l | grep linux-image</blockquote></li><li>使用apt工具清除小于当前内核版本的旧内核文件<br /><blockquote>sudo apt remove --purge linux-image-5.xx.x-xx-generic<br />sudo apt autoremove --purge</blockquote></li><li>再次查看/boot分区的大小,与处理前对比。<br /><blockquote>df -h</blockquote></li></ol>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-10163197624103249362021-10-28T21:18:00.003+08:002021-10-28T21:18:00.182+08:00拯救无法启动的Ubuntu和VirtualBox<p>刚刚,Ubuntu20.04TLS 一直启动不了,命令行停在“Started hold until boot process finishes up”,经查是硬盘空间被塞满了,解决方法是启动时按住SHIFT键不放,直到出现GRUB画面,选择“Advanced options for Ubuntu”,在新画面选择最新版本内核的“recovery mode”,然后在新画面中执行Clean,然后重启,如果仍然是老问题,那就按前面的方法进入最新版本内核的“recovery mode”,再选“root”,进入命令行界面,手动清理不需要的文件。完成后应该就能重启了。</p><p>我的情况是按上面的方法Ubuntu启动成功了,但VirtualBox又出了问题,提示VirtualBox.xml 文件是空的,如下图。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpbXLzQucykBk7Ug0hp4UqiTjVBhQLwekYgmg159BikyWmy9XR-84mZsrLmEqmYcjuNfx7Uodf9cVyiT1_cwxJhoqwoQqEspg2t8ockCskWIFx0m_8BWPTqqTuIN_QndjOi2qVItFafKA/s634/vbox-error-20211028.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="634" data-original-width="299" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpbXLzQucykBk7Ug0hp4UqiTjVBhQLwekYgmg159BikyWmy9XR-84mZsrLmEqmYcjuNfx7Uodf9cVyiT1_cwxJhoqwoQqEspg2t8ockCskWIFx0m_8BWPTqqTuIN_QndjOi2qVItFafKA/s320/vbox-error-20211028.png" width="151" /></a></div><br /><p>按错误提示的路径去文件夹里看,有个同名但后缀加了-prev,文件的日期是昨天,于是将其改名为VirtualBox.xml,再尝试启动VBox,居然成功了。</p><p>但高兴的太早了,两个虚拟机有出错了,提示对应的 .vbox 文件也是 empty ,去相应文件夹按上述操作如法炮制,成功启动了。<br /></p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-24545074491045105802021-10-27T16:50:00.001+08:002021-10-27T16:50:37.277+08:00Two useful email header analyzers<p>https://www.gaijin.at/en/tools/e-mail-header-analyzer</p><p>https://mxtoolbox.com/EmailHeaders.aspx <br /></p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-38706229721300870972021-10-26T22:30:00.001+08:002021-10-27T11:38:08.938+08:00Five step hiring process of Clickup<p>1. <b>Review</b>: Applicants are reviewed to ensure a good fit.<br />2. <b>Initial Interview</b>: Get to know the applicants.<br />3. <b>Mini Project</b>: A project for the team you're applying for is distributed.<br />4. <b>Final Interview</b>: This interview is conducted with team leads.<br />5. <b>Offer</b>: A carefully tailored offer is sent to the candidate.</p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-70440303412553416432021-07-12T19:39:00.002+08:002021-07-29T11:33:42.883+08:00Dialogue: Less Screens, More Happier.<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghr3mw81ZhIMpZiErYQjwUSKRjAjYDQdDfieuaxWrbUFohQpWNmOEVPNYUYzuS0_ABdKICZBOwgniEwJbwcZNz61N2gtMG5Mr7lRFYNt6vgssq2pIJZ6ksxgd9RGylc49AY6RENaCyBno/s840/LessScreeenMoreHappier.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="473" data-original-width="840" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghr3mw81ZhIMpZiErYQjwUSKRjAjYDQdDfieuaxWrbUFohQpWNmOEVPNYUYzuS0_ABdKICZBOwgniEwJbwcZNz61N2gtMG5Mr7lRFYNt6vgssq2pIJZ6ksxgd9RGylc49AY6RENaCyBno/s320/LessScreeenMoreHappier.jpeg" width="320" /></a></div><br /> A: I didn't sleep well last night. I was on my phone until well past midnight.<br /><p></p><p style="text-align: right;">B: Again? This is the third time this week you've stayed up on your phone all night. You might want to cut back on your screen time.<br /></p><p>A: The thing is, I've already spent much less time on my phone that I used to. I don't think screen has such an impact on my sleep.<br /></p><p style="text-align: right;">B: Actually, not just your sleep, but your general happiness.<br /></p><p>A: Oh really? I never thought much about it, to be honest.<br /></p><p style="text-align: right;">B: Yeah, I've recently watched a TED talk named Why Our Screens Make Us Less Happy. I recommend it for anyone wanting to know what screens are doing to us and what to do about it.<br /></p><p>A: Oh, sounds interesting!<br /></p><p style="text-align: right;">B: Yeah, the speaker showed that people spend way more time on apps that make them unhappy, such as apps for social networking and entertainment.<br /></p><p>A: That's exactly what I spend most time on. The problem is once I start using them, I just don't seem to be able to stop.<br /></p><p style="text-align: right;">B: That's another thing the speaker mentioned - the fact that unlike magazines, books, or newspapers which eventually end, those apps rob us of such stopping cues.<br /></p><p>A: That makes so much sense. That's why I can just keep on scrolling the news feed instead of putting the phone done and move on to something else.<br /></p><p style="text-align: right;">B: Exactly, it's bottomless. But you know what? It's never too late to change.<br /></p><p>A: Where do I start to go offline then?<br /></p><p style="text-align: right;">B: Well, the speaker suggested that you start with putting your phone away while having dinner or put it on flight mode when you start your morning.<br /></p><p>A: Sounds like a plan.<br /></p><p style="text-align: right;">B: It might be tough in the beginning, as you'll probably experience withdrawal the same way on would from a drug. But you'll get used to it eventually.<br /></p><p>A: It's definitely worth a try! I've already wasted so much time on the screens. It's time for me to take back control!<br /></p><p style="text-align: right;">B: That's right. There things in life that deserve more attention that your phone. Like personal connections, our hobbies, or the beauty around us. Trust me, once you're able to put the phone aside, you'll fell much happier and enriched that you were ever before.<br /></p><p>A: I bet!</p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-34697546151086759462021-04-14T20:09:00.001+08:002021-04-14T20:09:00.263+08:00Marine Traffic 水路交通查询<p>一个不错的网站,用于查询水路交通状况。尤其最近Ever Given卡在苏伊士运河后,大家对这个更关心了。 <br /></p><p><a href="https://www.marinetraffic.com/" target="_blank"> https://www.marinetraffic.com/</a></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi46lVaCqgfuYQrlSqBjXErlpSHC7Pdfth0RUkj2s7l-rioiz4ieLVjy4LcLBmwAdQIDzL4x8sbXOPB1-QcjK8MzOobsshv-v9hdsNwghZbnfji2FicuDp4bJ-wxUqZww0YpRTqC-LLfDQ/s649/MarineTraffic.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="431" data-original-width="649" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi46lVaCqgfuYQrlSqBjXErlpSHC7Pdfth0RUkj2s7l-rioiz4ieLVjy4LcLBmwAdQIDzL4x8sbXOPB1-QcjK8MzOobsshv-v9hdsNwghZbnfji2FicuDp4bJ-wxUqZww0YpRTqC-LLfDQ/s320/MarineTraffic.jpg" width="320" /></a></div><br /> <p></p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-75263718915431767942021-03-30T14:21:00.002+08:002021-03-30T14:21:55.769+08:00VS调试程序提示:检测到ContextSwitchDeadlock<p>小白用Visual Studio调试程序时,等了大概1分钟,突然提示:检测到ContextSwitchDeadlock,Google后,有人建议要调整Managed Debugging Assistants的设置,可我的程序只增加了一点内容,用于调用Oracle中的Procedure啊,跟Managed Debugging Assistants没关系吧?</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1_BrjjnKHGQbBUzC6l9wLdtWNSPfhm9o2o1eqsXXtzX2Is317aIeJdm2wbf2UEMzridiVikJea03VXyXGjL79HFdK8pE-ojUkmmupvD4WW_iFiP-0SRCLalHqtGN3-Ur8_x8KuaBSYcI/s262/Deadlock.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="142" data-original-width="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1_BrjjnKHGQbBUzC6l9wLdtWNSPfhm9o2o1eqsXXtzX2Is317aIeJdm2wbf2UEMzridiVikJea03VXyXGjL79HFdK8pE-ojUkmmupvD4WW_iFiP-0SRCLalHqtGN3-Ur8_x8KuaBSYcI/s0/Deadlock.png" /></a></div><p></p><p>回去到Oracle客户端程序看,居然是刚刚用SELECT …… FOR UPDATE更新相关表数据,用于调试Procedure,忘了commit,导致锁表了。</p><p>所以才DeadLock。 😅<br /></p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com1tag:blogger.com,1999:blog-3300321850415481435.post-32432881202839395512021-03-25T17:32:00.004+08:002021-03-27T10:25:13.593+08:00Oracle 11g 使用 UTL_MAIL 包实现Procedure发送邮件<p>想要通过Oracle的Procedure发送邮件,参考了<a href="https://blog.csdn.net/dataminer_2007/article/details/39993793" target="_blank">这篇文章</a>, 但是到了给非 SYS 用户赋权的时候就出错了。<br /></p><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcLPysitpR6AWG7pCYGh1SAY5TcS-Pe-a9qPPpmAYrqWNzRBC_h9Oe80YUmobRQ4jaTLPuEMEMAGnANPqqZ8MBmYrHl4Am-1AcAH7jj48pJ99-JSCy58FswUiMSHzEmJV138nZw8qQxf8/s225/SendEmail.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="225" data-original-width="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcLPysitpR6AWG7pCYGh1SAY5TcS-Pe-a9qPPpmAYrqWNzRBC_h9Oe80YUmobRQ4jaTLPuEMEMAGnANPqqZ8MBmYrHl4Am-1AcAH7jj48pJ99-JSCy58FswUiMSHzEmJV138nZw8qQxf8/s0/SendEmail.jpeg" /></a></div><p>具体出错是在以下这个命令时:</p><blockquote><p>grant execute on dbms_network_acl_admin to <i>al1</i></p></blockquote><blockquote><p>--上述命令中的al1是作者举例的,请替换成自己的Oracle用户。 <br /></p></blockquote><p>原因是dbms_network_acl_admin这个对象根本不存在。</p><p>遇到的错误提示是:ORA-24248: XMLDB extensible security not installed,通过以下SQL语句也能确认。<span></span></p><a name='more'></a><p></p><blockquote><p>SELECT comp_name , status FROM dba_registry; <br /></p></blockquote><p>结果中没有Oracle XML Database这一项。</p><p>所以我们通过下述步骤来安装它。进入$ORACLE_HOME/rdbms/admin目录,确认catqm.sql这个文件存在,用SYS用户以SYSDBA身份登入sqlplus,分别执行以下语句:</p><blockquote><p>spool install_xml_db.log --这个log文件名随意<br />@catqm xdb sysaux temp YES --安装XML Database,过程大概十分钟,等待完成。<br /></p></blockquote><p>继续以下指令: <br /></p><blockquote><p>DECLARE<br /> suf varchar2(26);<br /> stmt varchar2(2000);<br /> BEGIN<br /> select toksuf into suf from xdb.xdb$ttset where flags = 0;<br /> stmt := 'grant all on XDB.X$PT' || suf || ' to DBA';<br /> execute immediate stmt;<br /> stmt := 'grant all on XDB.X$PT' || suf || ' to SYSTEM WITH GRANT OPTION';<br /> execute immediate stmt;<br /> END;<br /> /<br /></p></blockquote><p>等待显示“PL/SQL procedure successfully completed.”后执行spool off。 </p><p>现在再去查comp_name应该就有XML Database了。SQL语句:</p><blockquote><p>SELECT comp_name , status FROM dba_registry; </p></blockquote><p>只安装了XML Database还不够,还会出现ORA-24247的错误,继续进行ACL授权。</p><p>继续用SYS用户以SYSDBA身份登入sqlplus,执行以下语句(注意替换principal为将来用于发邮件的Oracle用户):</p><blockquote><p>BEGIN<br /> DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (<br /> acl =>'mail_acl.xml',<br /> description => 'ACL for users of my application.',<br /> principal => '<i>SCOTT</i>',<br /> is_grant => TRUE,<br /> privilege => 'resolve',<br /> start_date => null,<br /> end_date => null<br /> );<br />END;<br />/<br /></p></blockquote><p>完成后提示“PL/SQL procedure successfully completed.”。</p><p>我在执行上述procedure时忘了改SCOTT,但因为SCOTT是默认用户,所以也成功了,要添加自己想要的用户,再执行下述语句:</p><blockquote><p>BEGIN <br /> DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(<br /> acl => 'mail_acl.xml',<br /> principal => '<i>你想要的用户</i>',<br /> is_grant => true,<br /> privilege => 'resolve'<br /> );<br />END;<br />/<br /></p></blockquote><p>更多信息请参考Oracle官方文档:https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_networkacl_adm.htm#BABEHFAG <br /></p><p>言归正传,接着执行如下语句进行ACL授权:</p><blockquote><p>BEGIN<br /> DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (<br /> acl =>'mail_acl.xml',<br /> host => 'localhost',<br /> lower_port => null,<br /> upper_port => null<br /> );<br />END;<br />/</p></blockquote><p>正确的话提示跟上面相同。这段语句里的内容不要改。 </p><p>上面内容完成后还要记得执行commit。</p><p>好了,现在ACL授权的问题解决了。用要发邮件的Oracle用户登录sqlplus,执行如下语句进行验证:</p><blockquote><p>column global_name format a20<br />column get_host_address format a15<br />select global_name,utl_inaddr.get_host_address from global_name;<br /></p></blockquote><p>如果返回值是Oracle服务器的名称和IP地址,就没问题了。</p><p>现在可以执行本文开头的语句,进行授权了。(ps:用SYS权限)</p><p>顺利的话,接着进行设定权限项目和指定邮件服务器地址和端口。</p><p>同样使用SYS用户以SYSDBA身份执行(同样要替换principal的值):</p><blockquote><p>BEGIN<br /> DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (<br /> acl => 'mail_server.xml',<br /> description => 'mail server',<br /> principal => '<i>AL1</i>',<br /> is_grant => TRUE,<br /> privilege => 'connect');<br />END;<br />/<br /></p></blockquote><p>和</p><blockquote><p>BEGIN<br /> DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (<br /> acl => 'mail_server.xml',<br /> host => '192.168.0.100',<br /> lower_port => 25);<br />END;<br />/<br /></p></blockquote><p>好了,可以用普通用户发邮件测试一下了。</p><blockquote><p>begin<br /> utl_mail.send(sender => 'oracle@maxwa.xyz',<br /> recipients => 'max@maxwa.xyz',<br /> message => 'Test only.',<br /> subject => 'Test from Oracle');<br />end;<br />/<br /></p></blockquote><p>如果结果是“PL/SQL procedure successfully completed”,那么恭喜你,大功告成!</p><p></p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-13806301532517709962021-02-19T21:20:00.009+08:002021-02-19T21:20:02.262+08:00为Debian 8 Jessie续“命”<p>Debian 7 Wheezy 是我的第一个生产环境的Linux发行版,后来到了目前的公司,新部署了Jessie,因为有LTS又懒得重新搬应用,所以一直用到现在,虽然去年6月LTS也停止提供支持了,还是没下定决心要部署新版本,终于<a href="http://cve.circl.lu/cve/CVE-2021-3156" target="_blank">CVE-2021-3156</a>爆出后就不得不考虑了。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNfRT3E_RzVJ-y4qy_XuqWQhrdUbEzYtqH_tzgi25U8ro7uhqLPGSqtWzHb934ebr4WjXrCp2jfa185G2WrUj4xaUcl2elnH1j64nOTdztIhzWnuDrV5balzuzZxA88PLtiigOTyHSpmE/s450/Debian8Jessie.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="225" data-original-width="450" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNfRT3E_RzVJ-y4qy_XuqWQhrdUbEzYtqH_tzgi25U8ro7uhqLPGSqtWzHb934ebr4WjXrCp2jfa185G2WrUj4xaUcl2elnH1j64nOTdztIhzWnuDrV5balzuzZxA88PLtiigOTyHSpmE/s320/Debian8Jessie.jpeg" width="320" /></a></div><br /> 在网上逛了一圈,发现居然有一家叫Freexian的法国公司提供Debian 8的扩展LTS服务,太棒了,又为懒人节省了时间,具体步骤请直接参照<a href="https://deb.freexian.com/extended-lts/docs/how-to-use-extended-lts/" target="_blank">How to use Extended LTS</a>,内容非常详尽,我就不赘述了。<p></p><p>当然,因为这是一家Mini公司,网站的流量费用估计占了不小开支,建议仅小的安装包从他们的服务器上更新,如果你的本地有多台Debian 8的话,建议使用镜像缓存。大家互相理解,才能使开源软件继续发展和壮大。<br /></p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-72378000881375207082021-02-09T14:24:00.004+08:002021-02-09T14:24:01.657+08:00SVN提交文件失败解决一例<p> 一个文件要通过svn提交到服务器,提示“No Lock Tokens Available”,导致提交失败。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMaRozLsm5610ZHE80Fk1m5HWDRSzu94MDQOMrUncmneFPugJlwIAHJ7Aa929VAYCBknAUTWpVfu1pLo6F70SGAqGs3bEUN4ydYWBFBkzUJv3bgzzP4yYifzQJrwPR9zHubSjj0zN8ZN4/s512/Tortoise_Rabbit.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="202" data-original-width="512" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMaRozLsm5610ZHE80Fk1m5HWDRSzu94MDQOMrUncmneFPugJlwIAHJ7Aa929VAYCBknAUTWpVfu1pLo6F70SGAqGs3bEUN4ydYWBFBkzUJv3bgzzP4yYifzQJrwPR9zHubSjj0zN8ZN4/s320/Tortoise_Rabbit.jpg" width="320" /></a></div>网上提供了很多方案,最后找了一个比较简单粗暴的,通过命令行进入文件对应的目录,执行:<p></p><p></p><blockquote><i>svn lock --force 文件名</i></blockquote><p></p><p>提示</p><p></p><blockquote><i>文件名 locked by user 用户名</i></blockquote><p></p><p>这样再去commit就OK了。</p><p>ps: 我是在Ubuntu 20.04上执行的,其他平台未尝试。</p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-28663494332244696112021-02-01T20:34:00.003+08:002021-02-01T20:34:00.222+08:00Tiptop ERP 给程序增加重要信息提醒<p> 一些程序由于其特殊性,需要在特定条件下给用户以提醒,避免不当使用。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrJymPtR5LZG9Eb2IdJa_Ra_PZueJsWFBmRcQ1-bfy3-_7h3zUdjiDZ3BmniaxN15aHFEPACRV3tUsrHAfViw3J9Krn3L5ivkdBgKv2QwyD8Uaxg0eUHdR4q4ffVKPIS_dSgeXUZiPa54/s260/reminder.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="194" data-original-width="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrJymPtR5LZG9Eb2IdJa_Ra_PZueJsWFBmRcQ1-bfy3-_7h3zUdjiDZ3BmniaxN15aHFEPACRV3tUsrHAfViw3J9Krn3L5ivkdBgKv2QwyD8Uaxg0eUHdR4q4ffVKPIS_dSgeXUZiPa54/s0/reminder.png" /></a></div><br />如下是我的范例,供参考。<p></p><p>思路:在系统重要资料修改记录档(azo_file)中增加一条记录用于辨识是否提醒用户,可以根据移动日期azo03跟运行程序的日期对比来决定是否再次提醒,再根据cl_prompt()返回的「是」或「否」来决定下次是否提醒。</p><p>简略步骤 :</p><p>1. 检查azo_file的函数</p><blockquote><p><span style="font-size: x-small;"><i>FUNCTION i100_chk_azo()<br /><br /> DEFINE l_date LIKE type_file.dat<br /><br /> LET l_date = g_today - 30<br /> LET g_i = 0<br /><br /> SELECT COUNT(*) INTO g_i<br /> FROM azo_file<br /> WHERE azo01 = g_prog<br /> AND azo02 = g_user<br /> AND azo03 >= l_date<br /> AND azo06 = 'DO NOT REMIND IN 30 DAYS.'<br /><br /> RETURN g_i<br />END FUNCTION</i></span><br /></p></blockquote><p> 2. 在程序加载时调用</p><blockquote><p><i><span style="font-size: x-small;"> IF i100_chk_azo() THEN<br /> #有「最近30天不提醒」记录<br /> ELSE<br /> LET g_msg = '这个程序产出的结果有很多坑,使用时要特别注意。\n\n最近30天还要提醒吗?'<br /> #此处也可将提醒文字写入ze_file,再用cl_getmsg(p_code, p_lang)调用。<br /> IF cl_prompt(20,20,g_msg) THEN<br /> #下次继续提醒<br /> ELSE<br /> INSERT INTO azo_file VALUES (g_prog, g_user, g_today, g_time, '', 'DO NOT REMIND IN 30 DAYS.', g_plant, g_legal)<br /> IF SQLCA.sqlcode OR SQLCA.sqlerrd[3] = 0 THEN<br /> CALL cl_err('insert azo', SQLCA.sqlcode, 1)<br /> EXIT PROGRAM<br /> END IF<br /> END IF<br /> END IF</span></i> <br /></p></blockquote>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-59939718582128808872021-02-01T17:31:00.004+08:002021-02-01T17:31:55.389+08:00TIPTOP ERP服务器硬盘空间被塞满<p> AP服务器的空间不够用了,但是这里除了/u1/out下的临时文件,不存其他文件啊。况且这次是根目录/满了。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVymeft2GlRRFy2VQrH-HXU2OQ1Lqj8THF1LdlH36wN12mTNtGcbjR5y7_9qtpIKYPcNWlkwY8u6WRP8jptmug72gqvnGH5SbiL2jVqdkL2XvE0lJl_Q1RuFqRE0YztEcxpRHGwKeXTPo/s600/hard-drive-is-full-thumbnail.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="400" data-original-width="600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVymeft2GlRRFy2VQrH-HXU2OQ1Lqj8THF1LdlH36wN12mTNtGcbjR5y7_9qtpIKYPcNWlkwY8u6WRP8jptmug72gqvnGH5SbiL2jVqdkL2XvE0lJl_Q1RuFqRE0YztEcxpRHGwKeXTPo/s320/hard-drive-is-full-thumbnail.jpeg" width="320" /></a></div> <p></p><p>用du -h --max-depth=1逐层目录查看,才知道是apache的日志把空间占了。位置在/usr/local/apache2/logs,短期的办法当然是直接删除文件了。</p><p>长期看要么写个脚本,把最近xx天的旧文件清除,要么直接设置apache的参数,不要记录日志。<br /></p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-88023386247357747932021-01-13T21:37:00.003+08:002021-01-13T21:37:02.558+08:00Tiptop结算成本费用结转相关程序<p> 成本结算经常用到的程序,在此做个笔记吧。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3RDLhU-BSd2jDQzlWhJZVlBM0iyX9G2CSVgqlWSlvIvGwMXAm1ng2QwJ-if2P8f-7JGb5q0aKTUF-1ShEf1y3HFbU78L0ogFBiZYHgd2IOgSJ77bRcVlNpAET-WwICkgfu2PrzAsDqI4/s320/15-571s09.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="214" data-original-width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3RDLhU-BSd2jDQzlWhJZVlBM0iyX9G2CSVgqlWSlvIvGwMXAm1ng2QwJ-if2P8f-7JGb5q0aKTUF-1ShEf1y3HFbU78L0ogFBiZYHgd2IOgSJ77bRcVlNpAET-WwICkgfu2PrzAsDqI4/s0/15-571s09.jpg" /></a></div><p>程序代号<span style="white-space: pre;"> </span>分录底稿单号<span style="white-space: pre;"> </span>程序目的</p><p>axcq310<span style="white-space: pre;"> </span>1-YYYYMM9999<span style="white-space: pre;"> </span>制费分摊</p><p>axct320<span style="white-space: pre;"> </span>A100-YYYYMM9999<span style="white-space: pre;"> </span>工单发料结转</p><p>axct321<span style="white-space: pre;"> </span>B100-YYYYMM9999<span style="white-space: pre;"> </span>工单入库结转</p><p>axct322<span style="white-space: pre;"> </span>C100-YYYYMM9999<span style="white-space: pre;"> </span>销货成本结转</p><p>axct323<span style="white-space: pre;"> </span>D100-YYYYMM9999<span style="white-space: pre;"> </span>盘盈亏结转</p><p>axct324<span style="white-space: pre;"> </span>E100-YYYYMM9999<span style="white-space: pre;"> </span>杂项进出结转</p><p>axct325<span style="white-space: pre;"> </span>F100-YYYYMM9999<span style="white-space: pre;"> </span>杂项进出差异结转</p><div><br /></div>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-5577966517204903532021-01-02T15:40:00.004+08:002021-01-14T15:54:26.697+08:00局域网内IPv6地址转换为IPv4地址的方法<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO68DeSg9INitDP0Cfy-HZqleuxk52z9vmgNT-_1_vC4Nm0x7gaA6EKIIvkUU_WQenkIR4SdqEv4TII7lpnIxB2F-pguLt0GN5Pco_bYergtXKT5wsFr4028y-u8hkIj3kdu7DsqU9wPc/s510/ethernet_switch_network_it_distributor_nsa_chip_component-1089512.jpg%2521s.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="340" data-original-width="510" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO68DeSg9INitDP0Cfy-HZqleuxk52z9vmgNT-_1_vC4Nm0x7gaA6EKIIvkUU_WQenkIR4SdqEv4TII7lpnIxB2F-pguLt0GN5Pco_bYergtXKT5wsFr4028y-u8hkIj3kdu7DsqU9wPc/s320/ethernet_switch_network_it_distributor_nsa_chip_component-1089512.jpg%2521s.jpeg" width="320" /></a></div><br />以下方法适用于Windows。<p></p><ol style="text-align: left;"><li>用<i>ping -a [ipv6 address]</i>取得该地址对应的电脑名称;</li><li>用<i>ping [电脑名称]</i>得到其IPv4地址。</li></ol><p>这个方法使用了ping命令的-a参数,其作用是将地址解析成主机名。 <br /></p>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0tag:blogger.com,1999:blog-3300321850415481435.post-45421148868644913312020-11-11T21:09:00.003+08:002020-11-11T21:09:00.567+08:00用批处理自动重启被停止的Windows服务<p>Windows Server上某个服务无故被停止,在尚未找出原因前,先写个bat批处理脚本,让它定期检查服务是否停止了,若是,就启动它。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik_SVX72qp5rEhf5lufUGAMKZjdqfSze3W7-8mJPZquDGiMPPIGqiwAoc17ihZfoRLxQv6oWbVQwOCg_FvHLe_2UvyaZNkEU1V1hqTvH3pEgpv09aS2vcL9zDagoe_H7YlsUnTpvHwYV0/s359/batch.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="349" data-original-width="359" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik_SVX72qp5rEhf5lufUGAMKZjdqfSze3W7-8mJPZquDGiMPPIGqiwAoc17ihZfoRLxQv6oWbVQwOCg_FvHLe_2UvyaZNkEU1V1hqTvH3pEgpv09aS2vcL9zDagoe_H7YlsUnTpvHwYV0/s320/batch.png" width="320" /></a></div><p>直接上源代码:</p><blockquote><p><span style="font-family: courier;">@echo off</span></p><p><span style="font-family: courier;">sc query LeadService | find "STATE" | find "RUNNING"</span></p><p><span style="font-family: courier;">if %errorlevel% == 1 (</span></p><p><span style="font-family: courier;"> echo The service is stopped.</span></p><p><span style="font-family: courier;"> net start LeadService</span></p><p><span style="font-family: courier;"> echo %date% %time% Restart >> c:\LeadService.log</span></p><p><span style="font-family: courier;">) else (</span></p><p><span style="font-family: courier;"> echo The service is running.</span></p><p><span style="font-family: courier;"> echo %date% %time% Do Nothing >> c:\LeaderService.log</span></p><p><span style="font-family: courier;">)</span></p></blockquote>Maxhttp://www.blogger.com/profile/11591077700255540864noreply@blogger.com0