Bash Crontab:zip:未找到命令

Bash Crontab:zip:未找到命令,bash,Bash,我有以下脚本,在执行时可以完美运行: #!/bin/bash zip logs.zip -r * 然而,当我从crontab运行它时,我得到 /home/ubuntu/script.sh: line 2: zip: command not found 为什么呢?我需要设置某种路径吗?我找不到它。 谢谢 使用以下命令查找zip的完整路径 which zip 然后使用完整路径是您的脚本。。。即: /usr/bin/zip logs.zip -r * 使用以下命令查找zip的完整路径 whic

我有以下脚本,在执行时可以完美运行:

#!/bin/bash
zip logs.zip -r *
然而,当我从crontab运行它时,我得到

/home/ubuntu/script.sh: line 2: zip: command not found
为什么呢?我需要设置某种路径吗?我找不到它。
谢谢

使用以下命令查找zip的完整路径

which zip
然后使用完整路径是您的脚本。。。即:

/usr/bin/zip logs.zip -r *

使用以下命令查找zip的完整路径

which zip
然后使用完整路径是您的脚本。。。即:

/usr/bin/zip logs.zip -r *

您的登录shell将在路径中包含zip,但是cron不会在登录shell中运行命令。您可以在crontab文件中指定环境变量,您可能应该将路径设置为与登录shell相同,并可能添加更多变量。我有:

SHELL=/usr/local/bin/bash
MAILTO="my@email.address"
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin

因此,cron将运行bash,向工作地址发送电子邮件,并使用一个合适的路径

您的登录shell将在路径中包含zip,但是cron不会在登录shell中运行命令。您可以在crontab文件中指定环境变量,您可能应该将路径设置为与登录shell相同,并可能添加更多变量。我有:

SHELL=/usr/local/bin/bash
MAILTO="my@email.address"
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin

因此,cron运行bash,向工作地址发送电子邮件,并使用合适的路径

您可能还应该将cd刻录到正确的目录,或者使用*的完整路径,即/usr/bin/zip/home/pear/logs.zip/var/log/*这是次优的-它是一个搜索路径的外部工具;如果您有别名、shell函数、缓存的优先路径查找等,则不能保证其结果与shell使用的结果完全相同。对于所有符合POSIX的shell,type zip是bash中内置的等效类型,或者command-v zip。此外,在cron引用的脚本中嵌入完全限定名会降低这些脚本对其他机器的可移植性,而在crontab顶部设置路径意味着您只在一个地方进行特定于机器的定制。您可能还应该将cd刻录到正确的目录,或者使用*的完整路径,即/usr/bin/zip/home/pear/logs.zip/var/log/*这是次优的-它是一个搜索路径的外部工具;如果您有别名、shell函数、缓存的优先路径查找等,则不能保证其结果与shell使用的结果完全相同。对于所有符合POSIX的shell,type zip是bash中内置的等效类型,或者command-v zip。此外,在cron引用的脚本中嵌入完全限定名会降低这些脚本对其他机器的可移植性,而在crontab顶部设置路径意味着您只在一个地方进行特定于机器的自定义。