我以前从未创建过cron作业,也从未使用过cron作业,但我从众多问题和答案中收集到的信息是,该流程相当简单,涉及到以下内容:
我发现了很多关于cron作业的问题和答案,但没有一个真正解释语法。我也试着在网上寻找可靠的解释,但没有结果。但是,我确实找到了this page,,它非常清楚地解释了crontab
语句的时间和日期部分。在
到目前为止,我的理解是:
1。创建bash脚本,可以放在任何地方。
#!/bin/bash
cd /home/user/public_html/scrapy/projects/myproject/spiders
scrapy crawl mycrawler
#!/usr/bin/bash
语句的意义是什么?
为什么会被注释掉?
使用shell脚本作为代理是运行Python脚本所必需的吗?
2。通过crontab -e
命令编辑crontab
对于这一部分,我看到了很多不同的建议,所以我将从一些不同的答案中列举一些例子。在
crontab -e
中嵌入命令是否被认为是一种好的做法?在*/5 * * * * /usr/local/bin/python /home/Documents/SCRAPE_PYTHON/SCRAPE.py &>> /home/Desktop/log.txt
/usr/local/bin/python
的意义是什么?在他在回答中说,&>> /home/Desktop/log.txt
是一个文件,错误和其他输出将被附加到其中。在
这就是&>>
的作用吗?
这对每个Linux环境都通用吗?
*/2 * * * * /home/user/shell_scripts/cj-scrapy.sh
为什么上面的代码不包括两个路径?
将shell脚本放入/home/user/scripts
目录是否存在潜在的安全漏洞?
有没有一个特定的目录来存放像这样的shell脚本?
示例4
cPanel Cron作业向导建议使用以下语法:
/usr/local/bin/php /home/user/public_html/path/to/cron/script
为什么crontab
建议之间存在所有差异?
我理解crontab
的时间和日期部分的语法,但是有人能解释一下其余部分的正确语法吗?
让我一一回答你们所有的问题!在
1.)在这种情况下,
#!/usr/local/bin/python
语句的意义是什么?在类似地,
#!/bin/bash
指出bash解释器。&必须是剧本的第一行。在2)是否需要创建一个shell文件来运行Python/scray脚本等?在
3)你真的可以
export PATH
并直接在crontab-e中执行其他命令(即cd ... && scrapy crawl mycrawler
)?在PATH
,那么您必须每次指定要执行的命令的完整路径,例如/usr/bin/find
,以便只运行find
命令。在4)第一条路径
/usr/local/bin/python
的意义是什么?在5)在他的回答中,他说
&>> /home/Desktop/log.txt
是将错误和其他输出附加到的文件。这就是&>>
的作用吗?这对每个Linux发行版都通用吗?在&>>
将输出到stdout
是的,这对于所有linux发行版来说都很常见。在6)在服务器上是否有一个特定的位置来存储像这样的shell脚本?在
/opt/<user>/scripts
文件夹中。在可选
https://crontab.guru/
-在这里您可以了解更多关于crontab语法的知识,其他的都是Linux的基本内容。在我试着为下面所有的问题和例子提供背景,但最终的问题是:
通常crontab条目是一个时间指令,后面跟着一个shell命令:
在UNIX中,} )指示应该使用哪个程序来解释下面的脚本。因此
#!
(或^{#!/usr/local/bin/python
意味着用python
(又名/usr/local/bin/python
)执行下面的脚本,就像/bin/bash
表示下面的脚本应该用bash
shell执行一样。这看起来像一个注释,因为它是一个注释。。。它被设计成对python
的注释,因此它不会被解释,但是它在执行时对UNIX
有意义(类似于preprocessor directive)。在这
shebang
回答了您的问题:答案是否定的。
shebang
使这个包装完全不必要。在现在来看看你的例子:
示例:
^{pr2}$把它拆开。
* 5 * * *
表示应该在一周中的每一天(next*
)的每一天(next*
)的第5小时(5
)的每分钟(first*
)运行此命令。从时间角度来看,这几乎肯定不是你想要的。该行的其余部分作为命令字符串执行,因此您将目录更改为project_folder/project_name
,然后执行scapy
。总的来说,这里的crontab
位不是您想要的,并且cd
上的相对路径表明该命令可能也不正确。在crontab就是紧跟命令的时间指令。在
例2
此命令将在每月的每一天的每小时的第
5
分钟运行一次。这里的/usr/local/bin/python
与#!/usr/local/bin/python
是多余的,因此它是非常不必要的。在&>>
将把stdout
和stderr
(&
)上的命令输出(>>
)追加到文件/home/Desktop/log.txt
。这个日志记录很好,每5分钟可能很好,但是python bits are not necessary. To answer your second question: yes this is
bash`语法使它可以与每个命令一起工作。在例3
这将在一周中的每一天的每一小时的每一分钟执行程序
/home/user/shell_scripts/cj-scraph.sh
(大概是一个shell
脚本)。这个脚本大概运行您的python脚本。在例4
这既不是python也不是cron任务。在
这里有很多问题,但是:
Cron job或Cron schedule是一组特定的执行指令,指定要执行的日期、时间和命令。crontab可以有多个执行语句。每个执行语句可以有多个命令(即每行)。在
这有什么意义!/usr/bin/bash语句?在
它是一个舍邦。如果脚本以路径/to/script命名,并且它以shebang行开头,#!/usr/bin/bash,然后程序加载器被指示运行程序/usr/bin/bash,并将路径/to/script作为第一个参数传递给它。在
为什么会被注释掉?在
在计算中,shebang是由数字符号和感叹号(#!)组成的字符序列在剧本的开头。在
使用shell脚本作为代理是运行Python脚本所必需的吗?在
关于crontab?不,你可以传递很多命令
通过crontab-e编辑crontab。简单的回答,是的。下面是一个非常快速的参考:
^{pr2}$例2 您告诉cron执行python脚本。Cron需要知道python二进制文件在哪里(在/usr/local/bin/python),它是执行位于/home/Documents/SCRAPE_python的python脚本所必需的/刮伤.py(用于将输出定向到日志文件)。在
相关问题 更多 >
编程相关推荐