Eine Zusammenfassung einiger Gründe, warum geplante Crontab-Aufgaben nicht ausgeführt werden
Aktualisiert: 9. Januar 2019 09:34:57 Autor: Hope in the Fields
Dieser Artikel fasst hauptsächlich einige Gründe zusammen, warum geplante Crontab-Aufgaben nicht ausgeführt werden. Er bietet auch einen gewissen Referenz- und Lernwert für Kollegen, die auf dieses Problem stoßen Redakteur zum gemeinsamen Lernen
Vorwort
Vor Kurzem bin ich bei der Arbeit auf einige Probleme gestoßen, die nicht ausgeführt wurden. Als ich später online suchte, stellte ich fest, dass im Internet hauptsächlich diese 5 Auslöser erwähnt wurden:
1crond-Dienst wurde nicht gestartet
crontab ist keine Funktion des Linux-Kernels, sondern basiert auf einem Crond-Dienst. Dieser Dienst kann gestartet oder gestoppt werden. Wenn es stoppt, wird es schwierig, geplante Aufgaben auszuführen. Die Lösung besteht darin, es zu öffnen:
crond
oder
service crond start
Wenn angezeigt wird, dass der Befehl crond nicht vorhanden ist, wurde er möglicherweise gelöscht. Er kann nicht nur unter CentOS über diesen Befehl neu installiert werden:
yum -y install crontabs
2 Berechtigungsproblem
Zum Beispiel: Das Skript hat keine x-Ausführungsberechtigung, Lösung:
Reduzieren Sie die Ausführungsberechtigungen oder verwenden Sie bashabc.sh zum Ausführen
Es ist auch möglich, dass der Benutzer, zu dem die Crontab-Aufgabe gehört, keine Schreibberechtigung für ein bestimmtes Verzeichnis hat und dies ebenfalls fehlschlägt
3-Pfad-Problem
Einige Befehle werden normal in der Shell ausgeführt, schlagen jedoch immer fehl, wenn sie in crontab ausgeführt werden. Es kann sein, dass das von crontab verwendete sh den Pfad nicht richtig erkennt. Melden Sie sich beispielsweise als Root an und führen Sie /root/test.sh aus
./test.sh
Das ist es. Und dieses Skript wird beispielsweise nicht in Crontab gefunden. Schreiben Sie es vollständig:
/root/test.sh
4Zeitunterschiedsproblem
Aufgrund des Zeitunterschieds zwischen Server und Client basiert die Crontab-Zeit auf der Serverzeit.
Das Problem des Jetlags ist wirklich ärgerlich. Das Phänomen ist wie folgt:
(1) Ich habe ein Timing-Skript eingerichtet und den Datumsbefehl verwendet, um die Serverzeit zu beobachten, als es die Ausführungszeit des Skripts erreichte, und stellte fest, dass es nicht ausgeführt wurde
(2) Und ich habe das Skript so eingestellt, dass es einmal pro Minute ausgeführt wird, und es ist in Ordnung
Verdammt, stimmt die Serverzeit? Muss ich welche Zeitzonen hinzufügen? Also habe ich versucht, die Skriptzeit um 10, 12 oder 8 Stunden zu verkürzen, aber es hat nicht funktioniert.
然而很显著是时间不一致引起的不执行。
最后用如下两行解决了问题:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime service crond restart
参考这篇文章:
5变量问题
有时侯命令中富含变量,但crontab执行时却没有,也会导致执行失败。
验证后,我的定时脚本test.sh不执行不是上述任何一种缘由,虽然我的脚本就一句话:
#!/bin/bash echo 123 >> testFile
我希望通过这些方法来测试我设置的定时脚本起作用了,于是我设置了该脚本每分钟执行一次,而且死活在脚本所在目录看不到这个文件linux 计划任务没执行,我自动执行
# sh test.sh
却能看见在脚本所在目录能看见这个文件
我怀疑是crontab根本没有执行,于是我在crontab中直接添加了
*/1 * * * * echo 123 >> /home/denglinjie/testFile
testFile文件生成了,说明crontab是执行了的,那看来是我脚本自身存在问题
最后发觉,原先是testFile这儿必须写完整的路径,我天真的以为testFile会生成在脚本所在的目录,所以改成了如下方式
#!/bin/bash echo 123 >> /data/denglinjie/testFile
之后就可以了。
虽然路径是个十分容易出问题的地方,假定在/home/denglinjie目录下有一个脚本文件test1.sh,之后在该目录下还有一个脚本文件test2.sh
在test1.sh中执行了test2.sh,并且用的是相对路径,即相对test1.sh所在的路径。
若果在crontab-e中编辑的时侯,执行的方法是
sh/home/denglinjie/test1.sh,当执行到调用shtest2.sh的时侯,系统会觉得是从crontab文件所在的目录去找test2.sharm linux,而且显然是找不到的,导致执行失败
最开始我想的方式是,我要将我写的待执行的脚本文件以及被调用的其他的脚本和crontab文件放在一个地方,这样就可以拉,并且失败了,可能是由于权限问题,我进不去/var/spool/cron目录。
所以另外一个解决方式就是在执行脚本之前先通过cd/home/denglinjie命令步入到脚本所在目录
------------------------------------------------------------------
近来又发觉一种新的导致crontab不执行的诱因
这儿我要执行的是python脚本,我python脚本的目录为:
/data/denglinjie/work/UpdateModuleSwitch
一开始我的定时任务是这样写的:
0 * * * * cd /data/denglinjie/work/UpdateModuleSwitch;python update_switch.py
发觉到了时间点竟然没有执行,其中update_switch.py的部份内容如下:
import pymongo
就是我的脚本中引入了自己安装的pymongo,注意,这个pymongo是安装到了指定的python版本上的
不执行缘由:crontab定时任务执行的时侯,使用的python不是我的那种python,使用的这个python没有安装pymongo,致使import失败
解决办法,改成如下方式:
0 * * * * cd /data/denglinjie/work/UpdateModuleSwitch;/data/zhoumi/install_evn/bin/python update_switch.py
指定运行使用的python,这个python早已安装绑定了pymongo,或则用如下方式:
0 * * * * export PATH=/data/zhoumi/install_evn/bin/:$PATH;cd /data/denglinjie/work/UpdateModuleSwitch;python update_switch.py
由于我的这个python是安装在我自己的用户目录下linux 计划任务没执行,所以系统找不到这个python,所以只要将我的python也加入到系统PATH环境变量中就可以了
总结
以上就是这篇文章的全部内容了,希望本文的内容对你们的学习或则工作具有一定的参考学习价值,假如有疑惑你们可以留言交流,感谢你们对本站的支持。
Das obige ist der detaillierte Inhalt vonKennen Sie einige Gründe, warum geplante Crontab-Aufgaben nicht ausgeführt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!