Linux随记(八)

一、crontab运行shell脚本,py脚本 (注意事项)

情景描述:
目前有个sh脚本他最初大致内容是。
cat t11.sh

#!/bin/bash
source /etc/profile 

/bin/python3  /tmp/1.py
sh             /tmp/1.sh
echo -e "$(date +%F)" >> /tmp/t11.log

############问题是
crontab调用他, 为啥py脚本没执行?     手动 sh t11.sh是正常执行的。
crontab | grep t11 是能看到每次的执行记录的

#排查思路:
1、都使用绝对路径  (指令写绝对路径) (shell/py 代码内容,涉及文件的操作)  他默认的pwd是在执行用户的家目录
2、都给x可执行权限
3、开头 source /etc/profile
4、crontab 写查看调试日志,比如   * * * * * sh /tmp/11.sh > /tmp/11.log 2>&1   (最初没考虑到py脚本内容的绝路路径。注意Py脚本里面try catch的书写)

5、使用set -xecho $? , sh -x  xxx.sh排查



5、创建一个简单的py程序,将hello world 输出到个record.txt

二、bclinux欧拉21.10编译安装nginx1.24.0

yum -y install gcc gcc-c++  pcre pcre-devel  openssl openssl-devel  zlib zlib-devel
yum install gd-devel -y

cd /DATA/apps
mkdir -p tools-nginx-1.24

rz -bey    #上传nginx-1.24.0.tar.gz       (wget https://nginx.org/download/nginx-1.24.0.tar.gz)

tar -xf nginx-1.24.0.tar.gz
cd nginx-1.24.0


./configure  --prefix=/DATA/apps/tools-nginx-1.24 --with-pcre --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_image_filter_module --with-mail --with-threads --with-mail_ssl_module --with-stream_ssl_module


make -j 4 && make install 

#
cd /DATA/apps/tools-nginx-1.24/conf
mkdir -p vhost

vi nginx.conf
修改
user root;
worker_processes  8;
#在http{}块里加入
    include       vhost/*.conf; 
	
	
	
#启动ngx
cd /DATA/apps/tools-nginx-1.24/sbin  && ./nginx -t   && ./nginx

三、curl指令内容带变量的写法(注意单、双引号,转义符号)

问题描述:最初的curl写法,此时最后的–form 'conditions 里面的 $line是没有被转义的。就算被其旁边的双引号包裹。 发现结果值是空

$line="测试xxx";

url=$(curl -s --location --globoff 'http://[xx:1a04]:2040/test/findPage.ilf' \
--header 'Authorization: Bearer eyJxxxxx' \
--form 'tableparam="[{\"name\":\"sEcho\",\"value\":3},{\"name\":\"iColumns\",\"value\":13},{\"name\":\"sColumns\",\"value\":\"\"},{\"name\":\"iDisplayStart\",\"value\":0},{\"name\":\"iDisplayLength\",\"value\":50},{\"name\":\"mDataProp_0\",\"value\":\"taskId\"},{\"name\":\"mDataProp_1\",\"value\":\"taskId\"},{\"name\":\"mDataProp_2\",\"value\":\"taskId\"},{\"name\":\"mDataProp_3\",\"value\":\"taskName\"},{\"name\":\"mDataProp_4\",\"value\":\"taskType\"},{\"name\":\"mDataProp_5\",\"value\":\"cronTab\"},{\"name\":\"mDataProp_6\",\"value\":\"inUse\"},{\"name\":\"mDataProp_7\",\"value\":\"ifFailRestart\"},{\"name\":\"mDataProp_8\",\"value\":\"ifFailRestartDelay\"},{\"name\":\"mDataProp_9\",\"value\":\"isSendAlarm\"},{\"name\":\"mDataProp_10\",\"value\":\"systemInternalId\"},{\"name\":\"mDataProp_11\",\"value\":\"taskIdMeta\"},{\"name\":\"mDataProp_12\",\"value\":\"taskGroupName\"}]"' \
--form 'conditions="[{\"name\":\"taskName\",\"value\":\"$line\"}]"')

#最初的写法:
--form 'conditions="[{\"name\":\"taskName\",\"value\":\"$line\"}]"'

#错误的写法1 (会出现报错的写法)
--form \"conditions="[{\"name\":\"taskName\",\"value\":\"${line}}]\"\" 

#错误的写法2 (去掉转义符号。)
--form 'conditions="[{"name":"taskName","value":'"$line"'}]"'
#不能把它的转义号给去掉,否则报错:
+ ret='{"timestamp":"2024-03-08T03:40:49.502+0000","status":500,"error":"Internal Server Error","message":"Found starting '\''['\'' but missing '\'']'\'' at the end. at character 0 of null","path":"/xxx/findPage.ilf"}'
#正确的写法:
 --form 'conditions="[{\"name\":\"taskName\",\"value\":\"'"$line"'\"}]"' 
#参考 年薪28大佬     
你都用单引号了,为什么还要把双引号转义。 <font color=red> 外面单引号的话,内部变量就用单引号加双引号'aaa'"$arg"''  </font>
你上面那些没有必要的转义去掉,单引号里面不需要再转义了。
(但其实上面的话有对有错。  但是在这里使用 \x22     \x27没有效果的。还有有次调试过程出现两个 form conditions=

再再再谈单双引号:
在这里插入图片描述

#by malongshuai
bash的引号是从前向后逐一寻找配对,所以""$a""完全等价于哆勒a,他左边一对引号配对了,说明没有引号包围哆勒a 
只有一种情况是从左到右逐一配对的例外,遇到命令替换的时候
命令替换是独立的新bash进程,先于引号解析移除的阶段,所以命令替换里的命令先被解析执行,所以命令替换外的双引号不会和命令替换里的双引号配对,命令替换里的引号也不影响命令替换外的引号


#后知后觉的参考:
https://stackoverflow.com/questions/13341955/how-to-pass-a-variable-in-a-curl-command-in-shell-scripting
https://www.cnblogs.com/XY-Heruo/p/16310409.html
https://blog.csdn.net/weixin_42808782/article/details/125296518 《如何在 shell 脚本中的 curl 命令中传递变量》

相关推荐

  1. C++<span style='color:red;'>随</span><span style='color:red;'>记</span>

    C++

    2024-03-10 12:58:05      30 阅读
  2. Spring Mybatis

    2024-03-10 12:58:05       38 阅读
  3. uniapp

    2024-03-10 12:58:05       50 阅读
  4. vol----学习!!!

    2024-03-10 12:58:05       35 阅读
  5. 设备驱动-

    2024-03-10 12:58:05       10 阅读
  6. git<span style='color:red;'>随</span><span style='color:red;'>记</span>

    git

    2024-03-10 12:58:05      7 阅读
  7. C语言——道C语言简单算法题

    2024-03-10 12:58:05       16 阅读
  8. -SQLAlchemy ORM 梳理

    2024-03-10 12:58:05       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-10 12:58:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-10 12:58:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-10 12:58:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-10 12:58:05       18 阅读

热门阅读

  1. MyBatis和MyBatis-Plus的差别和优缺点

    2024-03-10 12:58:05       22 阅读
  2. Jetty的ssl模块

    2024-03-10 12:58:05       23 阅读
  3. Linux的环境安装以及项目部署

    2024-03-10 12:58:05       20 阅读
  4. WPF Interaction

    2024-03-10 12:58:05       21 阅读
  5. 当Github启用PSA之后...

    2024-03-10 12:58:05       18 阅读
  6. 鸿蒙 进程模型-公共事件

    2024-03-10 12:58:05       19 阅读
  7. 解释 Git 的基本概念和使用方式

    2024-03-10 12:58:05       21 阅读