supermanearth 2023-12-13 11:07 采纳率: 66.7%
浏览 10
已结题

关于#centos#的问题,请各位专家解答!

a.sh内容如下:

#!/bin/bash
passwd="Labi10.161.11!e@p" 
declare -a ipaddress
ipaddress=("192.168.1.5,192.168.1.6") 
numsucess=0 
numfail=0
for IP in ${ipaddress[@]}
do
sshpass -p $passwd ssh $IP "sh /home/a/a.sh"
if[$?-eq 0 ]; then
 echo"登录成功">>/home/a/a.txt 
 let numsucess=$numsucess+1 
else
 echo"登录失败">>/home/a/a.txt 
 let numfail=$numfail+1 
fi
done
sshpass -p 'Labi10.161.11!e@p' scp root@92.168.1.5:/home/a/aa.txt /home/a 
sshpass -p 'Labi10.161.11!e@p' scp root@92.168.1.6:/home/a/bb.txt /home/a

```"
cron任务内容如下:
0 9,11,15,17 * * 1-5 /home/a/a.sh

说明:定时任务触发就会提示登录失败,但获取失败的错误密码与设置的并无异常,但是通过./a.sh直接执行就没有问题,脚本能正常执行没有报错信息,请问题这是哪里的问题呢?
  • 写回答

1条回答 默认 最新

  • 小孟多 2023-12-13 11:32
    关注

    根据你提供的信息分析,可能有以下几个问题导致定时任务触发时登录失败:

    环境变量:cron任务在执行时通常会使用系统的默认环境变量。而你的脚本中使用了sshpass命令,这可能是一个非标准的命令,不在默认的环境变量中。因此,你需要指定完整的路径来确保脚本中的命令能够正常执行。
    你可以使用which sshpass命令来确定sshpass命令的完整路径,然后将其替换为脚本中的相应位置。

    权限问题:cron任务以系统用户的身份运行,而手动执行脚本时通常以当前用户的身份运行。请确保定时任务的执行用户具有足够的权限来执行相关操作,例如登录到远程主机。
    你可以使用sudo命令来提升脚本的执行权限,或者将定时任务添加到具有适当权限的用户的crontab中。

    路径问题:你的脚本中使用了相对路径来执行a.sh脚本。但是,cron任务的工作目录可能与你手动执行脚本时的工作目录不同。因此,最好使用绝对路径来引用脚本。
    你可以使用cd命令切换到脚本所在的目录,然后再执行脚本,或者将脚本的完整路径用于定时任务。

    综上所述,你可以尝试以下解决方法:

    使用which sshpass命令找到sshpass命令的完整路径,并将其替换为脚本中相应的位置。
    确保定时任务的执行用户具有足够的权限来执行相关操作,例如登录到远程主机。
    使用绝对路径引用脚本。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月27日
  • 已采纳回答 12月19日
  • 创建了问题 12月13日

悬赏问题

  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 python螺旋图像
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析
  • ¥200 sqlite3数据库设置用户名和密码
  • ¥15 AutoDL无法使用docker install吗?