如何通过脚本创建 crontab

2024-10-28 08:37:00
admin
原创
294
摘要:问题描述:我需要通过运行脚本来添加 cron 作业以设置服务器。我目前正在使用 Ubuntu。我可以使用,crontab -e但这会打开编辑器来编辑当前的 crontab。我想以编程方式执行此操作。可以这样做吗?解决方案 1:这是一个不使用/要求新作业位于文件中的单行代码:(crontab -l 2>/...

问题描述:

我需要通过运行脚本来添加 cron 作业以设置服务器。我目前正在使用 Ubuntu。我可以使用,crontab -e但这会打开编辑器来编辑当前的 crontab。我想以编程方式执行此操作。

可以这样做吗?


解决方案 1:

这是一个不使用/要求新作业位于文件中的单行代码:

(crontab -l 2>/dev/null; echo "*/5 * * * * /path/to/job -with args") | crontab -

这很重要,这样如果当前没有 crontab 条目,2>/dev/null您就不会收到某些 *nixes 产生的消息。no crontab for username

解决方案 2:

对于用户 crontabs(包括 root),你可以执行以下操作:

crontab -l -u user | cat - filename | crontab -u user -

sed其中名为“filename”的文件包含要附加的项目。您还可以使用或其他工具代替进行文本操作cat。您应该使用crontab命令,而不是直接修改文件。

类似的操作是:

{ crontab -l -u user; echo 'crontab spec'; } | crontab -u user -

如果您正在修改或创建系统 crontab,则可以像操作普通文本文件一样操作它们。它们存储在/etc/cron.d/etc/cron.hourly/etc/cron.daily/etc/cron.weekly/etc/cron.monthly目录以及文件/etc/crontab和中/etc/anacrontab

解决方案 3:

/etc/cron.d在 Ubuntu 和许多其他发行版中,您只需将包含一行有效crontab条目的文件放入目录中即可。无需向现有文件添加一行。

如果您只是需要每天运行某些东西,只需将文件放入/etc/cron.daily。同样,您也可以将文件放入/etc/cron.hourly/etc/cron.monthly/etc/cron.weekly

解决方案 4:

Joe Casadonte 的一行程序非常完美,但如果你使用 运行set -e,即如果你的脚本设置为在发生错误时失败,并且还没有 cronjobs。在这种情况下,一行程序不会创建 cronjob,但不会停止脚本。静默失败可能会非常具有误导性。

原因是crontab -l返回了1返回码,导致后续命令(echo)无法执行……因此 cronjob 未创建。但由于它们是作为子进程执行的(因为有括号),因此它们不会停止脚本。

(有趣的是,如果你再次运行相同的命令,它将会起作用:一旦你执行了crontab -一次,crontab -l仍然不会输出任何内容,但它不再返回错误(你不再收到消息no crontab for <user>)。因此后续操作echo被执行并且 crontab 被创建)

无论如何,如果您使用 运行set -e,则该行必须是:

(crontab -l 2>/dev/null || true; echo "*/5 * * * * /path/to/job -with args") | crontab -

解决方案 5:

Crontab 文件只是文本文件,因此可以像任何其他文本文件一样处理。此crontab命令的目的是使编辑 crontab 文件更加安全。通过此命令编辑时,将检查文件是否有错误,并且只有在没有错误时才会保存。

crontab [path to file]可用于指定存储在文件中的 crontab。例如crontab -e,这只会在文件无错误的情况下安装该文件。

因此,脚本可以直接写入 cron tab 文件,也可以将其写入临时文件并使用crontab [path to temp file]命令加载。直接写入可以省去写入临时文件的麻烦,但也避免了安全检查。

解决方案 6:

对你的问题更简单的回答是:

echo "0 1 * * * /root/test.sh" | tee -a /var/spool/cron/root

您可以按照如下方式在远程服务器上设置 cronjobs:

#!/bin/bash
servers="srv1 srv2 srv3 srv4 srv5"
for i in $servers
  do
  echo "0 1 * * * /root/test.sh" | ssh $i " tee -a /var/spool/cron/root"
done

在 Linux 中,该文件的默认位置crontab/var/spool/cron/。在这里您可以找到所有用户的文件。您只需将您的 cronjob 条目附加到相应用户的文件中。在上面的示例中,root 用户的 crontab 文件将附加一个 cronjob,每天凌晨 1 点crontab运行。/root/test.sh

解决方案 7:

Cron 任务通常存储在每个用户的文件中/var/spool/cron

对您来说,最简单的事情可能就是创建一个配置了作业的文本文件,然后将其复制到 cron spool 文件夹并确保它具有正确的权限(600)。

解决方案 8:

对于那些建议的人,我得更正一下crontab -l | crontab -:这并非在每个系统上都有效。例如,我不得不在数十台运行旧版 SUSE 的服务器上向根 crontab 添加一项作业(不要问为什么)。旧版 SUSE 会在 的输出前添加注释行crontab -l,使其crontab -l | crontab -不具有幂等性(Debian 在 crontab 手册页中认识到了这个问题,并修补了其 Vixie Cron 版本以更改 的默认行为crontab -l)。

要在添加注释的系统上以编程方式编辑 crontabs crontab -l,您可以尝试以下操作:

EDITOR=cat crontab -e > old_crontab; cat old_crontab new_job | crontab -

EDITOR=cat告诉 crontab 使用cat编辑器(不是通常的默认 vi),它不会更改文件,而是将其复制到 stdout。如果crontab -期望输入的格式与crontab -e输出的格式不同,这仍然可能失败。不要尝试用 替换最后crontab -一个crontab -e- 它不会起作用。

解决方案 9:

嗯,/etc/crontab只是一个 ascii 文件,所以最简单的就是

 echo "*/15 * * * *   root     date" >> /etc/crontab

这将添加一个任务,该任务将每 15 分钟向您发送电子邮件。请根据个人喜好进行调整,并通过grep或其他方式测试此行是否已添加,以使您的脚本具有幂等性。

在 Ubuntu 等系统中,您还可以放入/etc/cron.*更容易操作和测试的文件---另外,您不必弄乱(系统)配置文件,例如/etc/crontab

解决方案 10:

这里介绍了如何在不直接编辑 cron 文件(不被认可的做法)的情况下修改 cron 条目。

crontab -l -u <user> | sed 's/find/replace/g' | crontab -u <user> -

如果你想删除 cron 条目,请使用以下命令:

crontab -l -u <user> | sed '/find/d' | crontab -u <user> -

我意识到这不是 gaurav 所要求的,但为什么不把所有的解决方案放在一个地方呢?

解决方案 11:

这是一种逐步添加 cron 作业的方法:

  ssh USER_NAME@$PRODUCT_IP nohup "echo '*/2 * * * * ping -c2 PRODUCT_NAME.com >> /var/www/html/test.html' | crontab -u USER_NAME -"

解决方案 12:

另一种解决方案是一次向 crontab 添加多个脚本:

cat <<EOF | crontab -
* * * * * /bin/foo.sh
* * * * * /bin/gaga.sh
EOF

解决方案 13:

这会将列出的 cron 作业插入my-cron-jobs.txt到 crontab 中,同时避免创建重复的条目:

( (crontab -l 2>/dev/null || true; cat my-cron-jobs.txt) | sort -u) | crontab -

更具体地说,sort -u 对 crontab 中的所有条目进行排序删除任何重复的行(包括重复的空行)。

因此,这会产生(可能是不想要的/想要的)副作用,即删除 crontab 中任何已经存在的重复行,并对条目进行排序。

它以Faria、Joe Casadonte之前的回答以及来自 Unix & Linux Stack exchange 的这个回答为基础。

解决方案 14:

我用 python 编写了一个 crontab 部署工具:https ://github.com/monklof/deploycron

pip install deploycron

安装你的 crontab 非常容易,这会将 crontab 合并到系统现有的 crontab 中。

from deploycron import deploycron
deploycron(content="* * * * * echo hello > /tmp/hello")

解决方案 15:

最简单的解决方案是使用 echo 和 >>,然后运行 ​​crontab 文件名,例如:

 ssh $HOST "echo \"* * * * * echo hello >> /var/spool/cron/crontabs/root\"; sleep 2; crontab /var/spool/cron/crontabs/root" 

解决方案 16:

我发现使用echo "" | crontab -u root -可以创建一个空白的 crontab 文件,而无需直接修改文件。然后,您可以使用以下示例轻松添加作业:

line="*/15 * * * * /local/bin/cron.sh > /var/log/cron.log 2>&1"
(crontab -u root -l; echo "$line" ) | crontab -u root -

解决方案 17:

简单地crontab -l < "your-file-path"

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用