小编Leg*_*ack的帖子

在 conda 虚拟环境下运行的 cron 作业

我设置了一个 Anaconda Python 虚拟环境,如果我在激活该虚拟环境时运行我的项目,一切运行良好。

但是我有一个配置为每小时运行一次的 cronjob。我将输出通过管道传输到日志,因为它没有正确运行。

crontab -e

10 * * * * bash /work/sql_server_etl/src/python/run_parallel_workflow.sh >> /home/etlservice/cronlog.log 2>&1
Run Code Online (Sandbox Code Playgroud)

我在 cronlog.log 中收到此错误:

Traceback (most recent call last):
  File "__parallel_workflow.py", line 10, in <module>
    import yaml
ImportError: No module named yaml
Run Code Online (Sandbox Code Playgroud)

这表明在没有激活虚拟环境的情况下,cronjob 以某种方式不运行文件。

为了解决这个问题,我在/home/user/.bash_profile文件中添加了一行:

conda activate ~/anaconda3/envs/sql_server_etl/
Run Code Online (Sandbox Code Playgroud)

现在,当我登录时,环境会自动激活。

但是,问题仍然存在。

我又尝试了一件事。我更改了 cronjob,(我也在 cronjob 运行的 bash 文件中尝试了这个)以在每次运行时明确手动激活环境,但无济于事:

10 * * * * conda activate ~/anaconda3/envs/sql_server_etl/ && bash /work/sql_server_etl/src/python/run_parallel_workflow.sh >> /home/etlservice/cronlog.log 2>&1
Run Code Online (Sandbox Code Playgroud)

当然,我试过的任何东西都没有修复它。我真的对 linux 一无所知,所以也许我需要改变一些明显的东西。

那么,无论如何要指定 cronjob 应该在虚拟环境下运行?

linux cron python3

14
推荐指数
2
解决办法
1万
查看次数

如何删除或访问名称中带有反斜杠 \ 的文件?

我在这里有一些文件,我使用 python 模块 pysftp 复制到这个 linux box:

[jm@spartan tf]$ ls -la
total 0
drwxrwxrwx. 3 jm jm  69 Aug 14 13:50 .
drwxrwxrwt. 9 root    root    238 Aug 14 13:49 ..
-rwxrwxrwx. 1 jm jm   0 Aug 14 13:49 .\gitkeep
drwxrwxrwx. 2 jm jm   6 Aug 14 13:50 .\innerfile
-rwxrwxrwx. 1 jm jm   0 Aug 14 13:50 .\innerfile\gitkeep
[jm@spartan tf]$ rm .\gitkeep
rm: cannot remove ‘.gitkeep’: No such file or directory
Run Code Online (Sandbox Code Playgroud)

它们是隐藏的,所以我仍在尝试弄清楚如何复制然后再将它们隐藏起来,但同时我想删除它们,但我无法删除。这里发生了什么?

我在 CentOS 7 上。

command-line shell filenames quoting

4
推荐指数
1
解决办法
4099
查看次数

标签 统计

command-line ×1

cron ×1

filenames ×1

linux ×1

python3 ×1

quoting ×1

shell ×1