共计 2532 个字符,预计需要花费 7 分钟才能阅读完成。
如何应用 Linux、Mac 定时执行 Alink 工作?举荐应用 Linux,Mac 下用于设置周期性被执行的指令 crontab,通过 crontab 来设置定时执行 Alink 工作。
crontab 简介
crontab 的命令格局为:
crontab [-u user] file
crontab [-u user] [-e | -l | -r]
各命令参数的解释如下:
- u user:用来设定某个用户的 crontab 服务。
- f file:file 是命令文件的名字,示意将 file 做为 crontab 的工作列表文件并载入 crontab。如果在命令行中没有指定这个文件,crontab 命令将承受规范输出(键盘)上键入的命令,并将它们载入 crontab。
- e: 编辑某个用户的 crontab 文件内容。如果不指定用户,则示意编辑以后用户的 crontab 文件。
- l: 显示某个用户的 crontab 文件内容,如果不指定用户,则示意显示以后用户的 crontab 文件内容。
- r: 从 /var/spool/cron 目录中删除某个用户的 crontab 文件,如果不指定用户,则默认删除以后用户的 crontab 文件。
咱们通过一个简略的示例来演示。
输出如下命令,编辑 crontab 文件内容,会主动关上一个文本编辑器,通常是 vim。
crontab -e
编辑内容,键入:
*/1 * * * * /bin/date >> /Users/yangxu/time.txt
其中,对于工作工夫和距离的设置阐明能够参考:
19. crontab 定时工作
https://linuxtools-rst.readth…_CN/latest/tool/crontab.html#id10
而后,保留并退出编辑状态,此时,crontab 曾经开始执行。
过几分钟,咱们检查一下文件 /Users/yangxu/time.txt 的内容,显示截图如下:
能够看到定时执行曾经起作用了。
进一步,应用命令:
crontab -l
能够看到以后的定时工作列表,显示内容如下:
*/1 * * * * /bin/date >> /Users/yangxu/time.txt
如果想要革除所有的定时设置,能够应用命令:
crontab -r
Alink 定时调度例子
crontab 能够定时运行各种命令。对于 Alink 来说,crontab 既能够启动 Alink 的 Java 工作,也能够运行蕴含有 PyAilnk 的 Python 脚本(Notebook 不能用),这些命令还能够蕴含在 Bash 脚本里。
上面以 Python 脚本为例进行阐明,假如咱们有以下的 PyAlink 代码:
from pyalink.alink import *
from datetime import datetime
timestamp = datetime.timestamp(datetime.now())
timestamp_str = datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')
useLocalEnv(2)
source = CsvSourceBatchOp() \
.setSchemaStr("sepal_length double, sepal_width double, petal_length double, petal_width double, category string") \
.setFilePath("http://alink-dataset.cn-hangzhou.oss.aliyun-inc.com/csv/iris.csv")
sink = CsvSinkBatchOp() \
.setFilePath("/Users/fanhong/Code/alink-jupyter/" + timestamp_str + ".csv")
sink.linkFrom(source)
BatchOperator.execute()
这个脚本会在正确运行后,在固定的目录下生成一个以以后工夫戳命名的 csv 文件。因为 crontab 在执行工作时,并不在当前目录,所以这里的目录门路不能应用相对路径,请依据状况批改。
将下面的代码,复制到文本编辑器中,批改目录门路,而后保留到任一目录下,文件名为“crontab-example.py”。
之后,咱们在当前目录测试这个脚本,应用 python3 crontab-example.py 运行。运行完结后,如果在后面指定的目录下生成了以以后工夫戳命名的 csv 文件,就阐明脚本没有问题。
而后,咱们通过 crontab 来增加定时作业,如后面简略示例所示,运行命令:
crontab -e
编辑如下内容,而后保留退出:
* * * * * /usr/local/bin/python3 /Users/fanhong/Code/alink-jupyter/crontab-example.py >/tmp/crontab-stdout.log 2>/tmp/crontab-stderr.log
留神到,这里 python 和 py 脚本的门路,咱们都应用了绝对路径。同时咱们将脚本运行的规范输入和谬误输入别离重定向到文件中,不便在运行失败时查看信息。这几个门路都能够依据机器环境进行批改,其中 python 门路个别能够通过 which python3 查看到。
下面所增加的定时作业示意每分钟将执行一次前面的脚本,如果作业失常运行,能够在之前 Python 脚本中 CsvSinkBatchOp 所用的绝对路径下看到每分钟所生成的 csv 文件。
如果没有生成文件,通常问题是 2 个:
- crontab 的零碎服务没有启动 。须要参考各个系统的服务启动形式来启用 crontab。在 MacOS 下,个别应用 sudo touch /etc/crontab 之后就能失常运行。
- 脚本运行谬误 。比方下面的命令运行失败,能够通过文件 /tmp/crontab-stderr.log 查看报错信息。因为咱们之前曾经胜利运行过脚本,所以这里通常是 Python 环境的问题。
以上。Alink 是基于 Flink 的机器学习算法平台,欢送拜访 Alink 的 GitHub 链接获取更多信息。也欢送退出 Alink 开源用户群进行交换~
Alink GitHub 链接:
https://github.com/alibaba/Alink
▼ 钉钉扫码退出 Alink 技术交换群 ▼