Skip to content

Commit

Permalink
doc: cpython_build.md
Browse files Browse the repository at this point in the history
  • Loading branch information
liangpinglk committed Jul 12, 2024
1 parent 8e9f3f9 commit 9e86ca9
Show file tree
Hide file tree
Showing 4 changed files with 192 additions and 1 deletion.
5 changes: 4 additions & 1 deletion SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,7 @@
* [linux]()
* [crontab-timing-task](linux/crontab-timing-task.md)
* [其他]()
* [使用github pages 部署文档](other/depoly-doc-github-pages.md)
* [使用github pages 部署文档](other/depoly-doc-github-pages.md)
* [python]()
* [apscheduler](python/apscheduler-use.md)
* [CPython build](python/cpython_build.md)
104 changes: 104 additions & 0 deletions linux/crontab-timing-task.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
## crontab 定时任务
> 通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。
### 命令格式
``` shell
crontab [-u user] file crontab [-u user] [ -e | -l | -r]
```

### 命令参数
- -u user:用来设定某个用户的crontab服务;
- file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
- -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
- -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
- -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
- -i:在删除用户的crontab文件时给确认提示。

### crontab的文件格式
分 时 日 月 星期 要运行的命令
- 第1列分钟0~59
- 第2列小时0~23(0表示子夜)
- 第3列日1~31
- 第4列月1~12
- 第5列星期0~7(0和7表示星期天)
- 第6列要运行的命令

### 常用方法

#### 创建crontab 文件
```shell
# 通过vi在文件中输入想要执行的命令
~ vi liantpingcron
# 将文件提交给crontab进程
~ crontab liantpingcron
```
#### 列出crontab 任务
``` shell
# 文件中的命令,每分钟执行一次
~ crontab -l
* * * * * date >> ~/test
# 查看执行结果
~ tail -f ~/test
Mon Oct 7 19:00:00 CST 2019
Mon Oct 7 19:01:00 CST 2019
Mon Oct 7 19:02:00 CST 2019
Mon Oct 7 19:03:00 CST 2019
Mon Oct 7 19:04:00 CST 2019
Mon Oct 7 19:05:01 CST 2019
```

#### 直接编辑命令执行定时任务
``` shell
~ crontab -e
```
执行后会通过系统默认编辑器进入编辑界面,然后可以正常输入定时任务了

#### 删除任务
``` shell
~ crontab -l
* * * * * date >> ~/test
* * * * * date >> ~/test
* * * * * date >> ~/test
~ crontab -r
~ crontab -l
crontab: no crontab for liangping
```
如果要删除一个,可通过crontab -e 进入编辑页面,然后一个一个删除

### 使用实例
``` shell
# 实例1:每1分钟执行一次myCommand
* * * * * myCommand
# 实例2:每小时的第3和第15分钟执行
3,15 * * * * myCommand
# 实例3:在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * myCommand
# 实例4:每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * myCommand
# 实例5:每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand
# 实例6:每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
# 实例7:每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart
# 实例8:每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
# 实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
# 实例10:每星期六的晚上11 : 00 pm重启smb
0 23 * * 6 /etc/init.d/smb restart
# 实例11:每一小时重启smb
* */1 * * * /etc/init.d/smb restart
# 实例12:晚上11点到早上7点之间,每隔一小时重启smb
0 23-7 * * * /etc/init.d/smb restart
```

### 注意事项
- 新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
- 谨慎使用crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。
- 在crontab中%是有特殊含义的,表示换行的意思。
- crontab 是无法继承系统环境变量的
> 比如你运行一个容器,指定了很多env配置,但是,通过crontab跑起来的任务是无法读到设置的env配置的
### 参考
该内容主要从[这里](https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html)整理而来。
File renamed without changes.
84 changes: 84 additions & 0 deletions python/cpython_build.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# CPython build

```shell
pip install cython
```

## 编译

> 在项目目录下执行`python setup.py build_ext --inplace`这样会在py(pyc)文件对应的路径生成对应的c和.so 文件
```python
from typing import Generator

from setuptools import setup
from Cython.Build import cythonize
import os


def find_all_file(file_path: str, target_ext: str = None) -> Generator:
"""
传入文件路径获取所有子文件路径
:param file_path:
:param target_ext:
:return:
"""
if os.path.isfile(file_path):
yield file_path
for root, ds, fs in os.walk(file_path):
for f in fs:
if not target_ext:
yield root + '/' + f if root else f
if target_ext and f.split('.')[-1].lower() == target_ext:
yield root + '/' + f if root else f


# 指定要编译的源文件,包括子目录中的文件
source_files = list(find_all_file(os.getcwd(), 'py'))

setup(
ext_modules=cythonize(source_files),
)
# python setup.py build_ext --inplace
```

## 清理文件

在实际交付中,编译好后,需要将不想干的文件清理掉,执行`python clear.py`


```python
import os
import shutil
from typing import Generator


def find_all_file(file_path: str, target_ext: str = None) -> Generator:
"""
传入文件路径获取所有子文件路径
:param file_path:
:param target_ext:
:return:
"""
if os.path.isfile(file_path):
yield file_path
for root, ds, fs in os.walk(file_path):
for f in fs:
if not target_ext:
yield root + '/' + f if root else f
if target_ext and f.split('.')[-1].lower() == target_ext:
yield root + '/' + f if root else f


def rm_file(all_file):
for i in all_file:
print(i)
if os.path.basename(i) not in ["setup.py", "clear.py"]:
os.remove(i)


rm_file(find_all_file(os.getcwd(), target_ext='py'))
rm_file(find_all_file(os.getcwd(), target_ext='c'))
# rm_file(find_all_file(os.getcwd(), target_ext='so'))
shutil.rmtree("build")
```

0 comments on commit 9e86ca9

Please sign in to comment.