我需要通过我运行的脚本添加一个cron作业来设置服务器。我目前正在使用Ubuntu。我可以使用crontab -e,但这将打开一个编辑器来编辑当前的crontab。我想通过编程来实现。
可以这样做吗?
我需要通过我运行的脚本添加一个cron作业来设置服务器。我目前正在使用Ubuntu。我可以使用crontab -e,但这将打开一个编辑器来编辑当前的crontab。我想通过编程来实现。
可以这样做吗?
当前回答
/etc/crontab只是一个ascii文件,所以最简单的就是
echo "*/15 * * * * root date" >> /etc/crontab
这会增加一份每15分钟给你发邮件的工作。根据您的喜好进行调整,并通过grep或其他方法测试是否已经添加了该行以使脚本具有幂等性。
在Ubuntu等平台上,你也可以将文件放到/etc/cron.*这更容易做和测试——另外,你不会弄乱(系统)配置文件,如/etc/crontab。
其他回答
对你的问题更简单的回答是:
echo "0 1 * * * /root/test.sh" | tee -a /var/spool/cron/root
您可以在远程服务器上设置cronjob,如下所示:
#!/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/。在这里您可以找到所有用户的crontab文件。您只需要将cronjob条目附加到相应的用户文件中。在上面的例子中,根用户的crontab文件被附加了一个cronjob,用于每天凌晨1点运行/root/test.sh。
在Ubuntu和许多其他发行版中,你可以把一个文件放到/etc/cron.D目录,其中包含包含有效crontab条目的单行。不需要向现有文件添加行。
如果你只是需要每天运行一些东西,就把一个文件放在/etc/cron.daily中。同样,您也可以将文件放入/etc/cron.每小时,/etc/cron./etc/cron.weekly。
它是一种增量添加cron作业的方法:
ssh USER_NAME@$PRODUCT_IP nohup "echo '*/2 * * * * ping -c2 PRODUCT_NAME.com >> /var/www/html/test.html' | crontab -u USER_NAME -"
对于crontabs用户(包括root),您可以执行如下操作:
crontab -l -u user | cat - filename | crontab -u user -
其中名为“filename”的文件包含要追加的项。还可以使用sed或其他工具来代替cat进行文本操作。您应该使用crontab命令,而不是直接修改文件。
类似的操作是:
{ crontab -l -u user; echo 'crontab spec'; } | crontab -u user -
如果您正在修改或创建系统crontab,那么可以像操作普通文本文件一样对它们进行操作。它们存储在/etc/cron.d, /etc/cron.每小时,/etc/cron.日报》/etc/cron.每周,/etc/cron.“/etc/crontab”和“/etc/anacrontab”文件。
Cron作业通常存储在/var/spool/cron下的每个用户文件中
您要做的最简单的事情可能就是创建一个配置了作业的文本文件,然后将其复制到cron spool文件夹,并确保它具有正确的权限(600)。