乱码三千 – 分享实用IT技术

乱码三千 – 码出一个新世界


  • 首页

  • 归档

  • 搜索

Linux Crontab 命令安装和使用教程:在 VPS 上设置定时任务

发表于 2020-09-18

一、Crontab 命令安装教程

首先检查一下 Crontab 是否安装:

1
crontab -l

如果没报错,就是已经安装好了,一般来说系统都会自带。

如果没安装,进行安装:

CentOS:

1
2
yum install vixie-cron
yum install crontabs

Ubuntu:

1
apt-get install cron

二、Crontab 命令使用教程

命令格式:

1
crontab [-u user] file crontab [-u user] [ -e | -l | -r ]

是不是觉得怪复杂的,其实一般来说其实就三个命令:

  • 列出所有定时任务:crontab -l
  • 编辑所有定时任务:crontab -e
  • 删除所有定时任务:crontab -r

使用 crontab -l 可以列出所有的定时任务,一行一个任务,一般来说,每行的格式如下:

1
分 时 日 月 星期 要运行的命令
  • 第 1 列:分钟,取值范围:0~59
  • 第 2 列:小时,取值范围:0~23(0表示子夜)
  • 第 3 列:日,取值范围:1~31
  • 第 4 列:月,取值范围:1~12
  • 第 5 列:星期,取值范围:0~7(0 和 7 表示星期天)
  • 第 6 列:要运行的命令

对于每一列,有如下几种表示方法:

  • *:每单位(比如每分钟,每小时)
  • 具体数字:就是具体的时间或者日期
  • 取值范围:比如 3 – 5,就是从 3 到 5 的所有值都取
  • */数字:比如 */2,就是每 2 分钟或者每 2 天之类的意思

下面看几个例子:

实例 1:每 1 分钟执行一次 myCommand

1
* * * * * myCommand

实例 2:每小时的第 3 和第 15 分钟执行

1
3,15 * * * * myCommand

实例 3:在上午 8 点到 11 点的第 3 和第 15 分钟执行

1
3,15 8-11 * * * myCommand

实例 4:每隔两天的上午 8 点到 11 点的第 3 和第 15 分钟执行

1
3,15 8-11 */2  *  * myCommand

实例 5:每周一上午 8 点到 11 点的第 3 和第 15 分钟执行

1
3,15 8-11 * * 1 myCommand

实例 6:每晚的 21:30 重启 smb

1
30 21 * * * /etc/init.d/smb restart

实例 7:每月 1、10、22 日的 4 : 45 重启 smb

1
45 4 1,10,22 * * /etc/init.d/smb restart

实例 8:每周六、周日的 1 : 10 重启 smb

1
10 1 * * 6,0 /etc/init.d/smb restart

实例 9:每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 smb

1
0,30 18-23 * * * /etc/init.d/smb restart

实例 10:每星期六的晚上 11 : 00 pm 重启 smb

1
0 23 * * 6 /etc/init.d/smb restart

实例 11:每一小时重启 smb

1
0 */1 * * * /etc/init.d/smb restart

实例 12:晚上 11 点到早上 7 点之间,每隔一小时重启 smb

1
0 23-7 * * * /etc/init.d/smb restart

实例 13:5小时后 每一小时重启 smb

1
0 5/1 * * * /etc/init.d/smb restart

错误示例:

如果你想定一个每天两点执行的任务:

1
0 2 * * * /etc/init.d/smb restart

但不能写成:

1
* 2 * * * /etc/init.d/smb restart

这种写法表示每天两点开始每分钟执行一次任务, 可能会陷入嵌套重复执行的问题

配置完后 最后启动定时任务

ubuntu下启动、停止与重启cron:

1
2
3
4
$sudo /etc/init.d/cron start
$sudo /etc/init.d/cron stop
$sudo /etc/init.d/cron restart
$sudo service cron status# 查看当前cron服务运行状态

定时任务备份

可以使用这种方法在$HOME目录中对crontab文件做一备份:

1
$ crontab -l > $HOME/mycron

问题排查

1. 启动cron 报错:

1
cron: can't lock /var/run/crond.pid, otherpid may be 4187: Resource temporarily unavailable

解决方案:

依次执行以下三个命令

删除pid 重新加载配置 重启启动cron

1
rm -rf /var/run/crond.pid
1
cron reload
1
cron restart

2.任务不执行 日志不打印

指令必须以绝对路径开头 比如:

1
* */2 * * *  /usr/bin/python3  /root/xxx/xxx.py >>/root/xxx/mylog_$(date +\%Y-\%m-\%d-\%H:\%M:\%S).log 2>&1

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

利用 IntelliJ IDEA 远程连接服务器并做ftp上传

发表于 2020-09-18

对于windows用户来说上传文件到服务器有很多资源可以利用,例如xshell,xftp等可视化进行服务器的管控,但是对于mac的小伙伴来说现在找一个替代xshell的不是很好找,要么不好用要么用起来比较繁琐.小编发现idea自带ssh连接,也可以通过idea进行文件管理上传至服务器.

打开idea可以单独设置一个空包作为服务器管理,只需要把要上传的文件放到包里面即可.

idea >> Tools >> Deployment >> Configuration 进入到配置页面

点击加号出现配置服务器信息.我们选择sftp文件上传模式,名称为为当前上产服务器设置的别名

录入必要信息:

  • SFTP host 服务器地址.

  • Port. 端口号

  • Root path 默认上传路径

  • User name 登录服务器用户名

  • Auth type 授权方式,这里小编采用密码授权模式

  • Password. 登录服务器密码

录入完必要信息以后可以点击Test SFTP connection进行连接测试

通过 Tools >> Start SSH 进行ssh远程连接,点击后会出现配置好的ssh信息,选择即可

链接成功后在idea的Terminal中可以看到链接成功的信息

通过Configuration 下选择配置好的ssh服务器进入Mappings文件夹 可以配置上传路径和本地文件存放路径

配置完以后 通过项目右键可以看到一个上传到服务器按钮点击即可把要上传的文件上传至服务器

上传后的效果.

至此通过idea远程链接ssh并上传文件至服务器配置完毕.需要的小伙伴们可以去使用啦

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Linux关于日期时间显示输出

发表于 2020-09-18

1、输出当前年月日

1
2
echo $(date +%F)
2014-02-21

或者

1
2
echo $(date +\%Y-\%m-\%d)
2014-02-21

2、输出当前时间(时分)

1
2
echo $(date +%R)
12:45

3、输出当前时间(时分秒)

1
2
echo $(date +%T)
12:52:51

4、输出星期

1
2
echo $(date +%A)
星期五

5、组合输出日期时间

5.1输出年月日

1
2
3
4
5
echo $(date +%Y/%m/%d)
2014/02/21
%Y参数: 年
%m参数: 月
%d参数: 日

5.2输出时分秒

1
2
3
4
5
echo $(date +%H:%M:%S)
12:50:44
%H参数: 时
%M参数: 分
%S参数: 秒

5.3输出年月日时分秒

1
2
3
4
5
echo $(date +%F%n%T)
2014-02-21 12:56:46
%n参数: 空格
%F参数: 年月日
%T参数: 时分秒

或者

1
echo $(date +\%Y-\%m-\%d-%H:%M:%S)

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

如何创建Xposed模块工程进行代码hook

发表于 2020-09-15

快速搭建模块工程

  1. 第一步 使用Android Studio创建空工程
  2. 第二步 导入依赖
1
2
compileOnly 'de.robv.android.xposed:api:53'
compileOnly 'de.robv.android.xposed:api:53:sources'
  1. 在AndroidManifest.xml清单文件application节点下加入以下代码
1
2
3
4
5
6
7
8
9
<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="Xposed模块初体验" />
<meta-data
android:name="xposedminversion"
android:value="53" />
  1. 创建Hook逻辑类,该类继承自IXposedHookLoadPackage,示例如下:
1
2
3
4
5
6
public class HookTest implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
XposedBridge.log("HOOK初体验:" + lpparam.processName + ":" + lpparam.packageName);
}
}
  1. 在assets目录下创建xposed_init文件并将Hook逻辑类引用路径填入,比如:
1
com.example.test.HookTest
  1. 编译并运行至装有xposed容器app的设备中即可, 重启设备生效

注:以上操作成功的前提是你需要一台拥有root权限的手机或者模拟器,并已经安装了xposed安装器

搭建本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

apk反汇编工具apktool问题集锦

发表于 2020-09-15

Apktool的基本使用

解包指令:

1
apktool d [apk文件] -o [解包存放路径]

如果使用的是jar包,则:

1
java -jar apktool.jar d [apk文件] -o [解包存放路径]

打包指令:

1
2
3
apktool b [源码目录] -o [apk文件]
或者
java -jar apktool.jar b [源码目录] -o [apk文件]

签名指令:

1
jarsigner -verbose -keystore [签名文件] -signedjar [签名后的apk 可自定义文件名] [需要签名的apk]  [签名文件的别名]

温馨提示

由于apk在反编译后进行回编时容易出现各种异常情况, 建议解包后立马进行装包测试,以免白费功夫!

问题1 DexBackedDexFile$NotADexFile

apktool反编apk时报错:

1
org.jf.dexlib2.dexbacked.DexBackedDexFile$NotADexFile: Not a valid dex magic value: cf 77 4c c7 9b 21 01 cd

提示很明显,就是非法Dex,这是因为apk里有加密过后的dex文件,比如有些apk的assets目录下有加密后的Dex文件,添加–only-main-classes参数即可

1
apktool d ~/tmp/test.apk -o /tmp/test --only-main-classes

apktool打包时找不到打包后的apk文件

新版的apktool需要加上 -o 参数, 否则只编译不输出apk 文件

1
apktool b ~/tmp/test -o /tmp/test.apk

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Android Studio:如何使用Android Studio与夜神模拟器开发调试

发表于 2020-09-15

使用Android Studio与夜神模拟器开发调试:

(1)运行夜神模拟器,

(2)打开命令行窗口,

(3)打开到夜神安装目录(如cd D:\Program Files\NOX\Nox\bin),

(4)执行命令:nox_adb.exe connect 127.0.0.1:62001,连接模拟器,

(5)若Android Studio连接不上夜神,重启模拟器即可。

4、这时在Android Studio窗口上点击run ‘app’(或shift+F10)

会发现弹出的窗口如下所示:

点击OK即可在模拟器上运行app

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

python requests库添加自定义cookies的方法

发表于 2020-09-14

一般的情况使用requests.Session()方法就可以解决cookies问题,但是在途中添加cookie遇到了一些问题。

第一种:

1
2
session = requests.Session()
session.cookies['cookie'] = 'cookie-value'12

功能:可以添加cookie,不会清除原cookie
缺点:不能设置path,domain等参数

第二种:

1
2
session = requests.Session()
session.cookies.set('cookie-name', 'cookie-value', path='/', domain='.abc.com')12

功能:设置path、domain等参数。
缺点:清楚原来的cookies

第三种:

1
2
session = requests.Session()
requests.utils.add_dict_to_cookiejar(session.cookies, cookie_dict)12

功能:可以添加cookie,不会清除原cookie
缺点:不能设置path,domain等参数

第四种:

1
2
3
4
session = requests.Session()
c = requests.cookies.RequestsCookieJar()
c.set('cookie-name', 'cookie-value', path='/', domain='.abc.com')
session.cookies.update(c)1234

功能:既能添加cookies,还能添加path,domain等参数。

cookie的path和domain属性

  1. domain表示的是cookie所在的域,默认为请求的地址,如网址为www.test.com/test/test.aspx,那么domain默认为www.test.com。而跨域访问,如域A为t1.test.com,域B为t2.test.com,那么在域A生产一个令域A和域B都能访问的cookie就要将该cookie的domain设置为.test.com;如果要在域A生产一个令域A不能访问而域B能访问的cookie就要将该cookie的domain设置为t2.test.com。
  2. path表示cookie所在的目录,asp.net默认为/,就是根目录。在同一个服务器上有目录如下:/test/,/test/cd/,/test/dd/,现设一个cookie1的path为/test/,cookie2的path为/test/cd/,那么test下的所有页面都可以访问到cookie1,而/test/和/test/dd/的子页面不能访问cookie2。这是因为cookie能让其path路径下的页面访问。
  3. 浏览器会将domain和path都相同的cookie保存在一个文件里,cookie间用*隔开。
  4. 含值键值对的cookie:以前一直用的是nam=value单键值对的cookie,一说到含多个子键值对的就蒙了。现在总算弄清楚了。含多个子键值对的cookie格式是name=key1=value1&key2=value2。可以理解为单键值对的值保存一个自定义的多键值字符串,其中的键值对分割符为&,当然可以自定义一个分隔符,但用asp.net获取时是以&为分割符。

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

如何检测获取到的代理ip是否为高匿ip

发表于 2020-09-14

方法一

通过第三方接口检测

1
2
url = "http://httpbin.org/ip"  # 如果返回的ip里面有本机ip,则证明不是匿名代理
url = "http://httpbin.org/get?show_env=1" # "origin"对应的value如果是你的本机ip,则不是匿名代理

示例:

1
2
3
4
5
# 访问http://httpbin.org/ip 返回

{
"origin": "117.136.0.213"
}

和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 访问http://httpbin.org/get?show_env=1 返回

{
"args": {
"show_env": "1"
},
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
"Alexatoolbar-Alx-Ns-Ph": "AlexaToolbar/alx-4.0.3",
"Host": "httpbin.org",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-5f5ebcfe-2047fe040ea2d1e594e5b6e0",
"X-Forwarded-For": "117.136.0.213",
"X-Forwarded-Port": "80",
"X-Forwarded-Proto": "http"
},
"origin": "117.136.0.213",
"url": "http://httpbin.org/get?show_env=1"
}

附上网站源码:https://github.com/postmanlabs/httpbin

方法二

利用某些禁止代理访问的网站进行代理访问测试,比如孔夫子旧书网

步骤:

第一步 先对孔夫子进行高频访问(不使用代理), 直到无法访问为止(说明本机ip已经被禁止)

第二步 换成代理进行访问 如果可以正常访问 则为高匿代理

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import requests
import time
from threading import Thread


def get_gao_ni_ip(ip, file_save):
url = "http://book.kongfz.com/175804/1038155437/"
headers = {
'Cookie': 'PHPSESSID=0d12c303a92043f13a3cc2c329e444f36b44ef71; shoppingCartSessionId=74c831996eb9a1009d79244d7d915040; kfz_uuid=f53edd56-8938-48af-a447-9a07bde47ffa; reciever_area=1006000000; Hm_lvt_bca7840de7b518b3c5e6c6d73ca2662c=1552367977; Hm_lvt_33be6c04e0febc7531a1315c9594b136=1552367977; kfz_trace=f53edd56-8938-48af-a447-9a07bde47ffa|10072231|834871367e51d410|-; acw_tc=65c86a0a15523697386136416e812159c1e7ce1072aea90b9eb27c93ee05cc; BIGipServerpool_nxtqzj=527099402.24615.0000; Hm_lpvt_bca7840de7b518b3c5e6c6d73ca2662c=1552371456; Hm_lpvt_33be6c04e0febc7531a1315c9594b136=1552371456',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
proxies = {
"http": "http://" + ip,
}
try:
resp = requests.get(url=url, headers=headers, proxies=proxies, timeout=2)
# print(resp.text)
if "胡适传论,上" \
"下。_胡明_孔夫子旧书网" in resp.text:
print("ip可用",ip)
file_save.write(ip + '\n')
else:
print("errer")
except:
pass


if __name__ == '__main__':
start_time = time.time()
# 储存可用的ip地址
file_save = open(r'D:\')

with open(r'D:\', 'r',
encoding='utf-8') as file_ips:
ips_list = file_ips.readlines()

thread_list = []
total_num = 0
for ip_one in set(ips_list):
# 前面携带http的
ip = ip_one.strip()
# 直接ip+port的
thred_ip = Thread(target=get_gao_ni_ip, args=[ip, file_save])
thread_list.append(thred_ip)
thred_ip.start()
total_num += 1
print(total_num, total_num)
# 为了是电脑CPU不至于很卡
time.sleep(0.005)
for i in thread_list:
i.join()
file_save.close()
end_time = time.time()
print((end_time - start_time), '秒')

方法三

利用百度搜索关键字 IP,出来的网站的结果,进行爬取,然后利用自己电脑本机ip和request请求响应回来的代理ip进行比较,如果不一样,说明请求的代理IP就是高匿的。

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

全球免费代理获取接口api

发表于 2020-09-14

免费代理IP库

警告

代理IP采集于网络,仅供个人学习使用。请勿用于非法途径,违者后果自负!

获取一个验证通过的代理IP

  • URL: https://ip.jiangxianli.com/api/proxy_ip
  • 响应数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"code":0,
"msg":"成功",
"data":{
"unique_id":"ad0611edba534fd2c39a36d77e383cfb",
"ip":"118.193.107.80",
"port":"80",
"ip_address":"北京市 北京市",
"anonymity":0,
"protocol":"http",
"isp":"电信",
"speed":375,
"validated_at":"2017-12-25 14:38:25",
"created_at":"2017-12-25 14:38:25",
"updated_at":"2017-12-25 14:38:25"
}
}

获取代理IP列表

  • URL: https://ip.jiangxianli.com/api/proxy_ips
  • 请求参数
参数名 数据类型 必传 说明 例子
page int N 第几页 1
country string N 所属国 中国,美国
isp string N ISP 电信,阿里云
order_by string N 排序字段 speed:响应速度,validated_at:最新校验时间 created_at:存活时间
order_rule string N 排序方向 DESC:降序 ASC:升序
  • 响应数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{
"code":0,
"msg":"成功",
"data":{
"current_page":1,
"data":[
{
"unique_id":"dd2aa4a97ab900ad5c7b679e445d9cde",
"ip":"119.167.153.50",
"port":"8118",
"ip_address":"山东省 青岛市",
"anonymity":0,
"protocol":"http",
"isp":"联通",
"speed":46,
"validated_at":"2017-12-25 15:11:05",
"created_at":"2017-12-25 15:11:05",
"updated_at":"2017-12-25 15:11:05"
},
{
"unique_id":"7468e4ee73bf2be35b36221231ab02d5",
"ip":"119.5.0.42",
"port":"22",
"ip_address":"四川省 南充市",
"anonymity":0,
"protocol":"http",
"isp":"联通",
"speed":127,
"validated_at":"2017-12-25 15:10:04",
"created_at":"2017-12-25 14:38:14",
"updated_at":"2017-12-25 15:10:04"
}
],
"last_page":1,
"per_page":15,
"to":8,
"total":8
}
}

访问频率限制

请注意访问频率以及防止无效页的数据获取。多次违规操作访问将被限制IP访问。如需解除IP请在修正操作后,ISSUE中申请解除限制。

详情参见:https://github.com/jiangxianli/ProxyIpLib

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

windows平台下一款强大的免费代理获取工具ProxyFire(烈火代理)

发表于 2020-09-14

简介

proxyfire是一个强大的在线代理收集和分类工具。它支持http、socks4、socks5、隧道和ssl代理验证。它可以将代理分为socks代理、超级匿名代理、一般匿名代理、透明代理、网关代理。它具有强大的论坛吸收功能、搜索引擎吸收功能、代理扫描功能。并对代理的查询国家、代理重复、智能删除代理水印、代理无序等功能进行了研究。默认设置可用于每天获取数千个新的代理列表

截图

本帖附件

点击下载

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

1…373839…50

乱码三千

android程序员一枚,擅长java,kotlin,python,金融投资,欢迎交流~

493 日志
143 标签
RSS
© 2025 乱码三千
本站总访问量次
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4
0%