热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

由crontab执行expect脚本问题引发的--crontab环境变量问题

手头上有一个远程重启目标服务器上进程的expect脚本,SHELL下单独执行时一切都OK,但是添加到cron任务中时执行却不能工作。部分代码如下:expect脚本:(datahomere

   手头上有一个远程重启目标服务器上进程的expect脚本,SHELL下单独执行时一切都OK,但是添加到cron任务中时执行却不能工作。部分代码如下: 

expect脚本:(/data/home/restart_expect)

      #!/usr/bin/expect

      spawn ssh -p xxx root@xxx.xxx.xxx.xxx

      #expect "*root's password*"
      expect "*Tencent:*"

      send "sh some remote scripts"
      send "exit/n"

      expect eof exit 0

crontab任务:

      */5 * * * * /data/monitor/new_itil_dicts/syn_tcms_data/run_syn.php /tmp/test.log 2>/dev/null

shell下单独执行一切没有问题,放到cron中却不行,开始定位问题。以下是整个过程:

1. 首先修改crontab的任务错误输出到一个执行文件

       */5 * * * * /data/monitor/new_itil_dicts/syn_tcms_data/run_syn.php /tmp/test.log 2>&1

2.查看文件/tmp/test.log上的错误输出提示如下

       找不到命令 ssh,这就让我有点纳闷,为啥会找不到 ssh命令(我装在/usr/local/bin目录下)呢,echo $PATH /usr/local/bin目录明明就在PATH中,这时想到是不是cron用的环境变量和shell的不一样,于是google之,发现cron在/etc/crontab中有如下内容:

       SHELL=/bin/sh
       PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
       MAILTO=root
      #
      # check scripts in cron.hourly, cron.daily, cron.weekly, and cron.monthly
      #

注意这里PATH变量发现ssh安装目录并不在这个上面,到这里就知道原来是cron和shell使用不同的PATH变量导致的问题。所以解决办法可以是:

1. 修改/etc/crontab的PATH变量,使包含expect中使用的命令如ssh

       SHELL=/bin/sh
       PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin:/usr/local/bin
       MAILTO=root

2. expect脚本使用命令的完整路径如,

       #!/usr/bin/expect

      spawn /usr/local/bin/ssh -p xxx root@xxx.xxx.xxx.xxx

      #expect "*root's password*"
      expect "*Tencent:*"

      send "sh some remote scripts"
      send "exit/n"

      expect eof exit 0


推荐阅读
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • Vulnhub DC3 实战记录与分析
    本文记录了在 Vulnhub DC3 靶机上的渗透测试过程,包括漏洞利用、内核提权等关键步骤,并总结了实战经验和教训。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 在 Ubuntu 22.04 LTS 上部署 Jira 敏捷项目管理工具
    Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ... [详细]
  • 网络安全实验:Telnet与SSH服务对比及抓包分析
    本实验旨在对比Telnet和SSH两种安全通信协议的服务差异,并通过搭建服务器和使用Wireshark抓包工具进行详细分析。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上安装和配置 MySQL、Tomcat 和 JDK 的步骤。通过本文,您将了解如何顺利安装这些组件,并确保它们能够正常协同工作。 ... [详细]
  • 本文介绍了 Oracle SQL 中的集合运算、子查询、数据处理、表的创建与管理等内容。包括查询部门号为10和20的员工信息、使用集合运算、子查询的注意事项、数据插入与删除、表的创建与修改等。 ... [详细]
author-avatar
blg1202702934392
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有