每天12点自动使用cron重启apache服务

35

我在测试服务器上安装了CentOs。

我想每天运行一个cron(cron需要每天在12AM运行Apache服务器)。

我的cron.daily文件夹位于/etc/cron.daily

请告诉我如何实现此操作的步骤。

通常我使用以下命令重新启动apache服务:

service httpd restart

我想使用cron在每天的凌晨12点自动重新启动apache服务。

提前感谢。


可能是Crontab - 每3小时重新启动apache的重复问题。 - runDOSrun
(使用24代替3并在凌晨12点执行) - runDOSrun
谢谢回复。我需要打开bash文件并写入以下内容:0 */24 * * */ root/restart_apache > /dev/null 2>&1/etc/init.d/httpd restart 这样对吗? - Vinayagam
8个回答

50

虽然@ einterview的答案几乎正确,但需要注意的是,在分钟列中使用 *将运行该小时的每一分钟。如果想要每小时运行一次,则操作步骤如下:

  1. SSH进入服务器。

  2. 使用 $ crontab -l 获取当前用户的作业列表

  3. 使用$ crontab -e编辑作业列表(默认编辑器将打开)

  4. 添加0 4 * * * service mysql restart,在早上4点重启mysql

  5. 添加0 5 * * * service apache2 restart,在早上5点重启apache2

  6. 添加0 0 * * * service apache2 restart,在午夜12点重启apache2

  7. 保存并关闭(nano中为Ctrl + O和Ctrl + X)

  8. 使用 $ crontab -l 重新检查


12
在我的(Debian)服务器上,我必须使用/usr/sbin/service而不是service - user3673
1
什么关于Ubuntu? - Sibidharan
3
为了安全起见,Cron作业可能不会在与您的shell相同的环境中运行。您可以指定完整路径来避免这种情况。要找到路径,您可以使用类似 whereis service 的命令。 - Oylex
9
您应该使用systemctl restart [service]命令来代替已经废弃的service命令。 - JuliSmz
1
你应该编辑root crontab sudo crontab -e(假设你已经以非root用户登录),因为用户的crontab没有权限重启服务。 - Mint

46

我明白了,以下是逐步向您展示如何将cron作业添加到系统中:

  1. 使用SSH登录到您的服务器
  2. 键入crontab -l以显示cron作业列表
  3. 键入crontab -e编辑您的crontab
  4. 添加0 4 * * * /etc/init.d/mysqld restart以在每天早上4点重启Mysql
  5. 添加0 5 * * * /etc/init.d/httpd restart以在每天早上5点重启Apache,并且
  6. 添加0 24 * * * /etc/init.d/httpd restart以在每天午夜12点重启Apache
  7. 保存文件
  8. 使用crontab -l重新检查

7
  1. 通过运行which service获取服务路径,它应该返回类似于/usr/sbin/service的内容。
  2. 通过crontab -e添加条目到cron表中,输入以下内容:@daily /usr/sbin/service httpd restart
  3. 如果你不想在运行时收到电子邮件通知,则应该添加以下内容:@daily /usr/sbin/service httpd restart > /dev/null 2>&1
  4. 要查找cron每天运行的时间,请运行:grep run-parts /etc/crontab

注:获取service的完整路径非常重要。


1
这里没有明确说明,所以我来说一下。当前用户和root用户有不同的cron作业列表。在我的Raspberry Pi 4上,按照上述方法操作不起作用,因为当前用户没有重启服务的权限。然而,以下方法可以解决问题:sudo crontab -l(列出当前作业)、sudo crontab -e(编辑cron作业列表)、0 0 * * * systemctl restart openvpn.service(将此行添加到底部)、保存并关闭(在nano中按Ctrl+O,ENTER,Ctrl+X)、sudo crontab -l(验证作业是否已添加)。换句话说,“crontab -l”会给出与“sudo crontab -l”不同的列表。在上述命令中添加“sudo”将使作业以root身份运行。

1
你可以使用以下命令:
crontab -e 将以下行添加到cron中:
0 12 * * * service httpd restart
或者使用以下命令:
echo "0 12 * * * service httpd restart" | crontab -
此网站是一个关于cron时间的好网站 https://crontab.guru

0

我还不能在这里发表评论,但实际上你可以使用0 0 * * *,然后它就会正常运行。


0

ubuntu 20.04.3 LTS 上尝试过

sudo crontab -e
0 8 * * * /home/<user>/restart_service.sh
# Runs above crontab 8AM everyday.

restart_service.sh 文件内部

#!/bin/bash
systemctl restart my_service.service

稍后为execute提供适当的permissions

chmod u+x /home/<user>/restart_service.sh


-3

按照这个建议添加: 0 12 * * * /etc/init.d/httpd restart 0 24 * * * /etc/init.d/httpd restart

我得到了"/tmp/crontab.D6cOzs/crontab":3: bad hour errors in crontab file, can't install. 只有设置为12才能正常工作,所以我认为24是不可接受的。


你好,欢迎来到StackOverflow。由于这不是对该问题的回答,你需要将其作为一个新问题发布,否则它很可能得不到任何关注。谢谢。 - MandyShaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接