【问题标题】:Shellscript not running in crontab to execute sqlcmdShell 脚本未在 crontab 中运行以执行 sqlcmd
【发布时间】:2020-07-10 10:42:01
【问题描述】:

我在 Red Hat 中使用 crontab 来运行一个 shell 脚本,它将一个 CSV 文件输出到目录。我可以手动执行脚本,但是当我通过cron 运行它时,它不会运行。我的脚本是:

IndividualInformation.sh

#!/usr/bin/env bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
sqlcmd -S 192.168.0.0 -d TestDB -U xx -P xxxx -Q "EXEC BPE.IndividualInformation_GetList" -o "IndividualInformation.csv" -h-1 -s"," -W
exit 0

我的 crontab 看起来像这样:

12 30 * * * /home/admin/cronTab_SQL/IndividualInformation.sh 2> /tmp/crontab_script_log.txt 2>&1

我似乎无法在 crontab 中运行脚本,当我检查日志 (crontab_script_log.txt) 时,日志为空。

【问题讨论】:

  • ...确认,运行/home/admin/cronTab_SQL/IndividualInformation.sh 2> /tmp/crontab_script_log.txt 2>&1 工作正常吗?
  • log.txt 文件已创建,但没有记录输入数据。虽然未创建 csv。
  • ...抱歉,我想问的是,当您从 shell 手动运行它时它是否工作正常?
  • 是的,手动在目录中创建了 csv 文件。唯一的问题是,当我在 cron 中运行它时,它不会创建 csv
  • OP 你解决了这个问题吗?

标签: linux cron redhat sqlcmd


【解决方案1】:
12 30 * * *

不是有效的时间规范。顺序为minutehourday of monthmonthday of week。没有 30 小时。

如果你想每天12:30运行脚本,应该是:

30 12 * * *

另外,在命令中

2> /tmp/crontab_script_log.txt

应该是

> /tmp/crontab_script_log.txt

您稍后将使用2>&1 重定向stderr,您需要将stdout 重定向到该文件。

【讨论】:

  • 先生,它不起作用,未创建 csv 文件并且更新了日志文件但没有记录
  • 您是否检查了系统日志以查看脚本是否正在运行。
  • 您可以先将 * * * * * touch /tmp/cron-is-running 添加到您的 crontab 中,然后检查是否在下一分钟间隔内创建了 /tmp/cron-is-running
  • 我只是在 shell 脚本中执行命令 chmod 755 并运行它。因为它是手动工作的,所以除了将它放在 crontab 中之外,我没有执行其他命令。我还是linux新手,还在一步步学习,请问在哪里可以找到你指的系统日志?
  • ... 同样如前所述,检查您的主目录中是否已创建 .csv 文件,以防您未将 cd ... 添加到您的 crontab 中。
【解决方案2】:

您的文件可能在其他地方(可能在您的主目录中)。

试试这个 crontab:

12 30 * * * cd /home/admin/cronTab_SQL && /home/admin/cronTab_SQL/IndividualInformation.sh 2> /tmp/crontab_script_log.txt 2>&1

【讨论】:

  • 既然他有脚本的绝对路径,为什么还要cd
  • 它是必需的,因为它看起来像脚本对输出文件使用相对路径(实际上只是文件名)。如果脚本使用带有-o 的绝对名称,则不需要。
  • 输出文件是/tmp/crontab_script_log.txt,这是一个绝对路径。
  • 我认为 OP 表示已创建 /tmp/crontab_script_log.txt,但缺少 IndividualInformation.csvcd 将帮助在已知目录中创建此文件。
  • @Bar 我认为您的答案是根本原因。我要投赞成票。
【解决方案3】:

问题是 csv 文件已创建但保存在 /root 文件夹中。

我只是编辑我的脚本以将 csv 文件保存到我想要的目录:

sqlcmd -S 192.168.0.0 -d TestDB -U xx -P xxxx -Q "EXEC BPE.IndividualInformation_GetList" -o "\home\admin\crontab_SQL\IndividualInformation.csv" -h-1 -s"," -W

【讨论】:

    【解决方案4】:

    我确实有这个问题。 所以它在命令行中运行正确,而不是在 crontab 中。 但是查看日志您可能会发现: sqlcmd:找不到命令

    运行

    哪个sqlcmd

    并将您的脚本更改为精确的 sqlcmd :

    /opt/mssql-tools/bin/sqlcmd -S 1.2.3.4 -U sa -P xxxxxx -Q "备份 数据库 [${nombase}] 到磁盘 = N'${fexp}' WITH RETAINDAYS = 7, NOFORMAT, INIT, NAME = N'${basename} - Sauvegarde', SKIP, NOREWIND, NOUNLOAD, STATS = 10" 2>&1 1>> $txt

    fexp 是目标文件,txt 在个人日志文件中

    【讨论】:

      猜你喜欢
      • 2020-02-02
      • 2013-10-18
      • 1970-01-01
      • 2020-10-19
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 2014-10-06
      相关资源
      最近更新 更多