如何获取需要在 Synology NAS 的任务计划程序中运行的第 3 方库的 python 脚本?

Posted

技术标签:

【中文标题】如何获取需要在 Synology NAS 的任务计划程序中运行的第 3 方库的 python 脚本?【英文标题】:How to get python scripts requiring 3rd party libraries running in Task Scheduler of Synology NAS? 【发布时间】:2022-01-02 04:31:38 【问题描述】:

现在我需要在 Synology NAS 的任务计划程序中运行一个使用 3rd 方库的 py 文件。我通过sudo su获得了NAS终端的权限,并通过命令curl -k https://bootstrap.pypa.io/get-pip.py | python3安装了pip。

脚本轮安装在“/var/packages/py3k/target/usr/local/bin”中。然后我尝试用sudo python3 -m pip install pandas 安装pandas,安装成功。然后我继续安装请求,日期时间也是如此。他们都成功了。

当我转到/volume1/@appstore/py3k/usr/local/lib/python3.5/site-packages 时,我可以在那里看到它们。

我实际上安排了 2 个 py 文件,一个是简单的 py 文件,另一个是使用 3rd 方库的 py 文件。简单的py文件在NAS中运行成功。它按照设定每分钟重复一次。但是使用3rd的那个还是不能跑。

下面是完美运行的简单py文件,

def main():
    f = open("/volume1/homes/admin/python/result.txt", 'w+') 
    for i in range(10): 
        f.write("This is line 0:d\n".format(i+1)) 
    f.close()
if __name__=="__main__":
    main()

下面是不太简单的不能成功生成log.txt的,

from datetime import datetime
import os

def write_file(filename,data):
    if os.path.isfile(filename):
        with open(filename, 'a') as f:  # in append mode
            f.write('\n' + data)   
    else:
        with open(filename, 'w') as f: # in write mode
            f.write(data)
 
def print_time():   
    now = datetime.now()
    current_time = now.strftime("%H:%M:%S")
    data = "This is to log each minute Cron runs, the time is: " + current_time

    return data

if __name__=="__main__":
    write_file('log.txt' , print_time())

有谁知道我的问题是什么?为什么不太简单的不能运行? OS 库在 Python 3.0 或更高版本中是默认的,所以我想我已经安装了所有必需的。

【问题讨论】:

任何错误信息?并且,您确定它没有成功运行,只是不在您认为它正在运行的地方吗?而不是log.txt 尝试/tmp/log.txt。 (您可能没有注意到 /log.txt~root/log.txt 另外,不确定 synology 是否有它,但您可能希望将输出通过管道传输到“记录器”,例如:@hourly /path/to/mycommand.py args 2>&1 | logger -t cron.hourly.mycommand.py 感谢您的光临,我刚刚检查过,tmp 和 root 中没有 log.txt 文件 对不起,我不知道这是什么@hourly /path/to/mycommand.py args 2>&1 | logger -t cron.hourly.mycommand.py这个有教程链接吗?我没有看到错误消息,因为我没有在终端中运行它。 @hourly 是在您的 crontab 中表示“每小时运行一次”的一种方式。 crontab.guru/every-hour 【参考方案1】:

尝试同时指定文件名和路径。 在你的情况下是write_file('/volume1/homes/admin/python/log.txt' , print_time())。我假设您将 log.txt 文件放在与 result.txt 文件相同的位置。

我记得 synology nas 喜欢更明显的路径来查找文件。

【讨论】:

以上是关于如何获取需要在 Synology NAS 的任务计划程序中运行的第 3 方库的 python 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅使用一个浏览器 (Firefox) 在远程网络上同时访问多个 NAS 的 Synology-DSM?

如何在局域网内访问 Synology NAS 上的文件

如何连接Synology的L2TP

Synology NAS搭建NFS服务

在 Synology NAS 上通过 docker 启动 mongo

在 Synology NAS 上安装 Nextcloud 时连接被拒绝错误