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 命令中传递变量》

四、 oracle的trc文件、trm文件 随记

#by 若即若离
 /oracle/app/oracle/diag/rdbms/app1/trace/   下的trc文件、trm文件 可以删掉。
 建议是做个备份或压缩。 trc是跟踪文件,trm是结构化文件,trc作用大约trm,如果数据库系统有故障时,可以查看这些文件。

五、centos7中 /var/adm/pacct文件过大,处理方法

问题描述: /var/盘符空间不足, /var/adm/pacct文件占用空间99GB。
在这里插入图片描述

#处理方法:
sudo -i
cd /var/adm/   &&  >pacct

strings pacct | head -10
#参考资料:   accton相关的
https://www.ucartz.com/clients/index.php?rp=/knowledgebase/1149/How-to-StartorStop-and-EnableorDisable-process-accounting-psacct.html

https://www.cnblogs.com/YangJiaXin/p/10531197.html  《Linux 查看文件被那个进程写数据》

crontab -l -u adm
cat /usr/lib/systemd/system/psacct.service
去/usr/lib/systemd/system/ 下,看有没有 /var/account/pacct 和 /var/adm/pacct的内容

在这里插入图片描述

六、fdisk和parted挂盘操作 - 随记(18TB的)

在这里插入图片描述

1、fdisk挂盘操作

fdisk /dev/sdb
Command (m for help): p  #打印磁盘信息,此时没内容
Command (m for help): n  #new一个  new partition
Select (default p):  #默认按回车
Partition number (1-4, default 1):  #默认按回车
First sector (2048-3745210367, default 2048):  #默认按回车
(2048-3745210367, default 3745210367): #默认按回车

Command (m for help): p   #此时打印了 1.8T的容量信息。
Command (m for help): w   #保存写入
#详细过程:
[root@gd-sz-bxg-dn-51 ~]# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.35.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x28eee628.

Command (m for help): p
Disk /dev/sdb: 1.76 TiB, 1917547708416 bytes, 3745210368 sectors
Disk model: HW-SAS3508      
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 262144 bytes / 262144 bytes
Disklabel type: dos
Disk identifier: 0x28eee628

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (1-4, default 1): 
First sector (2048-3745210367, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-3745210367, default 3745210367): 

Created a new partition 1 of type 'Linux' and of size 1.8 TiB.

Command (m for help): p   
Disk /dev/sdb: 1.76 TiB, 1917547708416 bytes, 3745210368 sectors
Disk model: HW-SAS3508      
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 262144 bytes / 262144 bytes
Disklabel type: dos
Disk identifier: 0x28eee628

Device     Boot Start        End    Sectors  Size Id Type
/dev/sdb1        2048 3745210367 3745208320  1.8T 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.


####
mkfs.ext4 /dev/sdb1 
mkdir /data && chmod -R 777 /data/
sudo mount /dev/sdb1 /data

2、parted挂盘操作

交互式操作
lsblk -f
parted /dev/sdb

#将MBR磁盘格式化为GPT
(parted) mklabel gpt
#划分所有空间到一个分区
(parted) mkpart primary 0 -1
#显示设置的分区大小
(parted) print
#退出parted程序
(parted) quit

在这里插入图片描述

非交互操作
parted /dev/sdc mklabel gpt
parted /dev/sdc mkpart "primary 0 -1" #正确
parted /dev/sdc p

mkdir /data
chmod -R 777 /data/
mkdir /data1
chmod -R 777 /data1

partprobe
mkfs.xfs -f /dev/sdb1
mkfs.xfs -f /dev/sdc1
lsblk -f

echo 'UUID="7b2ec7e8-3643-49b5-91f1-731f0f2ebc24" /data xfs defaults 0 0' >> /etc/fstab
echo 'UUID="9bb5a611-75c2-493f-bf00-6a490a08a4e9" /data1 xfs defaults 0 0' >> /etc/fstab

#检查
mount -a
df -mTh

18TB挂盘
在这里插入图片描述

其他说明

超过2TB的盘,无法使用fdisk,所以使用parted,改gpt format。 他fdisk认的是mbr format
在这里插入图片描述

七、Navicat 左侧栏 搜索框捷键为F12

左侧栏,如果数据库的表很多,按F12会呼出搜索框来搜索 ,再按F12就会取消。

八、secureCRT中, 使用rz -bey上传文件的注意事项

#问题描述
同事上传Windows上的test.jar包到4A服务器。启动web服务后发现报错,无法正常运作。试了很多次。

#排查思路:
对比Windows的test.jar 与 linux上test.jar的md5值  (md5sum test.jar) 发现竟然是不一样的。

然后我将test.jar压缩为test.zip ,再次上传到linux服务器。 发现 unzip test.zip 竟然报错!?
在我个人电脑上传个111.zip到服务器,是可以正常unzip 111.zip的。 md5值也是一致的。最后发现是那边的电脑勾选了"ASCII方式上传"的问题。

#还有其他思路
1、传到“安全文件夹”,然后在下载到服务器
2、让其他同事也帮传看看,区别操作
#结论:
上传文件的时候不要勾选“以ASCII方式上传文件”。他的md5sum值会有变化,文件本身也有改变。

在这里插入图片描述

九、迁移/备份web服务器(centos7)杂谈

#大致需要备份的东西:
#1、crontab任务的脚本
root用户:crontab -l -u root > root-crontab.txt
test用户:crontab -l -u test > test-crontab.txt

#2、系统文件
cat /etc/profile > profile.txt
cat /etc/rc.local > rc.local.txt
df -mhT > df.txt
lsblk -f > lsblk.txt
cat /etc/fstab > fstab.txt
cat /etc/hosts > hosts.txt
cat /etc/passwd > passwd.txt
hostname > hostname.txt
cat /etc/profile > profile.txt
cp /etc/ssh/sshd_config .
cp /etc/ssh/ssh_config .
ss -naltpu > ss-naltpu.txt
cat /etc/sysctl.conf > sysctl.conf.txt
rpm -qa > rpmPackage_list.txt
cp /etc/ntp.conf .
cp -rp /etc/sysconfig/network-scripts .

cp -rp /etc/systemd/system/*.service /backup/systemd_service_backup
cat /etc/sudoers > sudoers.txt

#防火墙
#firewall-cmd --zone=public --list-rich-rules
#firewall-cmd --state
cat /etc/sysconfig/iptables > iptablesCfg.txt
/etc/firewalld/firewalld.conf > firewallCfg.txt


#3、运行的web程序
一般都部署在固定的挂载数据盘符里面, 比如/data/apps下 (程序包,CA/SSL证书,web配置文件、日志文件、自定义脚本 、 docker镜像/docker配置等)

#4、备份家目录
/home/test  , /root


#数据库服务器另有些许区别。

十、 cat -n xx.csv 和 wc -l xx.csv 统计行数的说明区别

#long shuai
wc -l统计换行符数量,cat -n给每行标记行号。有的文件,最后一行是没有换行符的,直接结束文件。

如果最后一行没有换行符结束文件的话,那wc -l要少一行   (cat不加n就会发现 , 输出的文件内容是紧跟着shell提示符的  (除非有的终端自动换行了))


 如果手动编辑,在末尾 我手动回车,他 wc -lcat -n 就一样的行数了

在这里插入图片描述
下面的第6行 ,行尾没有 $号
在这里插入图片描述

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值