📜  bash 期望不能在 crontab 中工作 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:29:35.497000             🧑  作者: Mango

Bash 期望不能在 crontab 中工作 - Shell-Bash

简介

Bash 是一种 Unix shell,也是一个命令语言。它是 GNU 操作系统的主要 shell,并且是业界广泛使用的 shell。

Crontab 是一个用于在指定的时间间隔内执行命令的 Unix 工具,它对于自动化任务非常有用。但是,有时候在 crontab 中使用 bash 时,会出现一些问题。本文将讨论在 crontab 中使用 bash 可能会遇到的一些问题,并提供解决方案。

问题
  1. 没有正确的环境变量:

在 crontab 中运行 bash 时,它会在没有启动 shell 的情况下运行。这意味着在不同的环境变量下执行命令,而不是我们通常在命令行终端中使用的那些变量。因此,当您在 crontab 中运行 bash 脚本时,可能会发现脚本无法正常工作。

  1. 没有正确的路径:

类似于环境变量问题,如果 crontab 中的 bash 脚本没有包含正确的路径,那么脚本也无法正常工作。这是由于在 crontab 中执行命令时,当前工作目录可能不同于您通过终端运行命令时使用的目录。

  1. 没有正确的 shell:

默认情况下,crontab 不使用 bash,而是使用 /bin/sh。这可能会导致您的脚本中的某些 Bash 特定语法无法正常工作。

解决方案
  1. 设置正确的环境变量:

要解决此问题,请在您的 bash 脚本中设置必要的环境变量。例如,使用 export 命令将 PATH 设置为您需要的路径。您还可以在 crontab 文件中设置永久环境变量,如下所示:

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
  1. 使用绝对路径:

您可以在您的 bash 脚本中使用绝对路径来解决此问题。例如,您可以使用 /usr/local/bin/mycommand,而不是仅使用 mycommand。您也可以在 crontab 文件中设置永久路径,如下所示:

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
  1. 明确执行 shell:

您可以将 bash 作为 crontab 的 shell,而不是默认的 /bin/sh。要执行此操作,可以将以下行添加到您的 crontab 文件中:

SHELL=/bin/bash
结论

在 crontab 中使用 bash 可能会遇到一些问题,但这些问题都有解决方案。正确设置环境变量和路径,并明确执行 shell,可以使您的 crontab 中的 bash 脚本正常运行。