【问题标题】:Crontab for Postgresql failing with command not foundPostgresql 的 Crontab 因找不到命令而失败
【发布时间】:2020-11-15 06:12:26
【问题描述】:

我为 Postgresql 设置的 cronjob 遇到了一些问题。它报告错误 psql: command not found。请参阅下面的错误日志输出。

仅供参考,当我通过将 /var/opt/tableau/tableau_server/TIL_scripts/FIREPROD-DWH_Daily_Extract.bash 粘贴到我的 CLI 中并按返回来手动运行 bash 脚本时,它会启动并成功完成作业在远程 RDS 数据库上,然后在日志中添加一条消息。

但是,同一脚本的 crontab 会启动,然后立即失败。我在这里错过了什么?

1) 错误日志如下

/var/opt/tableau/tableau_server/TIL_scripts/FIREPROD-DWH_Daily_Extract.bash: line 1: psql: command not found
/var/opt/tableau/tableau_server/TIL_scripts/FIREPROD-DWH_Daily_Extract.bash: line 2: psql: command not found

2) FIREPROD-DWH_Daily_Extract.bash 文件内容如下:

export PGPASSWORD=FIREPRODW@r3h0u11; psql -h 'fireprod-pgsql-rds.testdomain.net' -U 'fireproddbwhadmin' -d 'fireprod-datawarehouse' -c 'select schedules_ldn_daily()'
export PGPASSWORD=FIREPRODW@r3h0u11; psql -h 'fireprod-pgsql-rds.testdomain.net' -U 'fireproddbwhadmin' -d 'fireprod-datawarehouse' -c 'select schedules_tv_daily()'

3) 以下为 root 用户的 .bashrc 文件:

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions
export PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/tableau/tableau_server/packages/customer-bin.20201.20.0614.2321:/home/ec2-user/.local/bin:/home/ec2-user/bin:/var/opt/tableau/tableau_server/data/tabsvc/services/pgsql_0.20201.20.0614.2321/pgsql/bin

4) echo $PATH 显示如下:

[root@FIREPROD-02 ec2-user]# echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/opt/tableau/tableau_server/packages/customer-bin.20201.20.0614.2321:/var/opt/tableau/tableau_server/data/tabsvc/services/pgsql_0.20201.20.0614.2321/pgsql/bin

5) Crontab 配置如下:

00 2 * * * /var/opt/tableau/tableau_server/TIL_scripts/FIREPROD-DWH_Daily_Extract.bash >> /home/ec2-user/fireprod-dwh_daily_extract.log 2>&1
00 2 28-31 * * [ $(date -d tomorrow +\%d) -eq 1 ] && /var/opt/tableau/tableau_server/TIL_scripts/FIREPROD-DWH_Monthly_Extract.bash >> /home/ec2-user/fireprod-dwh_monthly_extract.log 2>&1

【问题讨论】:

标签: linux postgresql amazon-ec2 cron


【解决方案1】:

crontab 有它自己的路径。如果你想让它找到 psql,你需要将 PATH 添加到 crontab 的顶部:

PATH=/usr/local/bin, etc

或在脚本中提供 psql 的完整路径。

【讨论】:

  • 嗨,阿德里安,在发帖和回复之间,我想通了。我在脚本中添加了以下内容。 #!/bin/bash PATH="/var/opt/tableau/tableau_server/data/tabsvc/services/pgsql_0.20201.20.0614.2321/pgs​​ql/bin" 并将我的 .bash 更改为 .sh
  • 但我也尝试将 psql 替换为完整的独占路径 /var/opt/tableau/tableau_server/data/tabsvc/services/pgsql_0.20201.20.0614.2321/pgs​​ql/bin/psql 这也有效。所以这两个选项中的任何一个都有效。是的
  • 您上面的评论表明我也可以添加 crontab 文件的路径?因为我在我的 crontab 中安排了 4 个任务,所以我是否只需将其直接添加到我想要路径的任务上方?会不会和 crontab 文件中安排的其他 3 个任务混淆?
  • PATH 与 MAILTO、SHELL 等一起放在文件的顶部。只要他们的命令在 PATH 中,他们在 shell 中运行时也不会感到困惑。我通常只在 crontab 条目中使用命令的完整路径。
猜你喜欢
  • 1970-01-01
  • 2015-12-01
  • 2019-11-07
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2014-08-06
  • 1970-01-01
相关资源
最近更新 更多