首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Shell不只是在crontab执行时才运行python

Shell不只是在crontab执行时才运行python
EN

Ask Ubuntu用户
提问于 2020-02-01 06:47:22
回答 1查看 252关注 0票数 0

我有一个外壳脚本,运行python,然后附加一个pdf到电子邮件通过小狗。

Shell脚本:

代码语言:javascript
运行
复制
cd ./pod_reports/script/
whereareyou=`pwd`
OUT=`python3 dummy.py`
cd ..
filename=$(ls *.pdf -1t | head -1)
strt="echo Did we get python? "
mailmutt="| mutt -s 'Subject Line' -a $filename -- me@email.com"
stmt="$strt$whereareyou$OUT$mailmutt"
echo $stmt
eval $stmt

Python,dummy.py

代码语言:javascript
运行
复制
import sys
OUT = sys.stdout.write(" I did python!! ")
sys.exit(0)

当shell脚本直接从命令行运行时,我将通过“您在哪里”和“我做了python!”获得预期的pwd!声明在电子邮件正文中,连同预期的附件。当脚本通过crontab排定时,我得到了预期的‘When’和附件,但我没有从python获得消息。我从这里了解到,当shell由crontab执行时,python根本没有运行。

我不明白为什么。这是crontab所期望的行为吗?如果是这样的话,如果不是在shell中,如何调度一系列脚本?

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2020-02-01 16:46:06

回答: crontab可能有与命令行不同的程序路径。

碰巧的是,在我们的系统中,“mutt”(电子邮件)程序存储在/usr/bin/中,这个路径是通过运行crontab的任何机制知道的,因此它能够成功地发送电子邮件。但是,我想在这个shell中运行的许多程序,包括python3,都位于一个不同的目录中:/usr/local/bin/。crontab不知道这个本地文件夹中的程序(实际上,即使在crontab计划的shell中运行哪个python3也不会返回任何内容)。这是尽管当我从命令行运行一个shell时,多变量和python3都在工作。

解决方案是从它们的绝对路径运行所感兴趣的<#>程序(在我的例子中是python3):

代码语言:javascript
运行
复制
cd ./pod_reports/script/
whereareyou=`pwd`
OUT=`/usr/local/bin/python3 dummy.py`
cd ..
filename=$(ls *.pdf -1t | head -1)
strt="echo Did we get python? "
mailmutt="| mutt -s 'Subject Line' -a $filename -- me@email.com"
stmt="$strt$whereareyou$OUT$mailmutt"
echo $stmt
eval $stmt
票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1207260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档