Xử lý lỗi crontab truncate command

Case: Nhét 1 đoạn mysqldump vào crontab để backup db hàng đêm. Sáng hôm sau kiểm tra ko thấy file dump đâu.
đoạn command khai báo crontab

0 0 * * * /usr/bin/mysqldump -uzabbixuser -pMikita zabbixdb > /opt/backup/zabbixdb-`date +%F`.sql

Giải quyết ra sao?
chạy bằng crontab nên output lúc chạy sẽ được ném vào /var/mail/<user>
Ở đây chúng ta chạy cron trên user root, check file /var/mail/root

From root@devopsvn.xyz.localdomain  Tue Mar 31 00:00:01 2020
Return-Path: <root@devopsvn.xyz.localdomain>
X-Original-To: root
Delivered-To: root@devopsvn.xyz.localdomain
Received: by devopsvn.xyz.localdomain (Postfix, from userid 0)
        id 1FCA36000345; Tue, 31 Mar 2020 00:00:01 +0700 (+07)
From: root@devopsvn.xyz.localdomain (Cron Daemon)
To: root@devopsvn.xyz.localdomain
Subject: Cron <root@devopsvn.xyz> /usr/bin/mysqldump -uzabbixuser -pMikita zabbixdb > /opt/backup/zabbixdb-`date +
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <LANG=en_US.UTF-8>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Message-Id: <20200330170001.1FCA36000345@devopsvn.xyz.localdomain>
Date: Tue, 31 Mar 2020 00:00:01 +0700 (+07)

/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file

Để ý dòng subject, thấy command của chúng ta bị cắt mất còn 1 đoạn ngắn xíu, nguyên nhân do ký tự %

Percent-signs (%) in the command, unless escaped with backslash (\), 
will be changed into newline characters, and all data after the 
first % will be sent to the command as standard input.

tiến hành escape ký tự %, cron thay đổi thành

0 0 * * * /usr/bin/mysqldump -uzabbixuser -pMikita zabbixdb > /opt/backup/zabbixdb-`date +\%F`.sql

lưu lại crontab.

Khắc phục lỗi tomcat khởi động chậm

Khi bật tomcat, từ khi chạy startup tới khi server hoàn tất online có thể lên tới 30s. Nếu kiểm tra log catalina.out có thể thấy ghi chú rõ thời gian khởi động cho từng tiến trình của tomcat
Ví dụ:

31-Mar-2020 08:30:51.102 WARNING [main] org.apache.catalina.core.StandardContext.setPath A context path must either be an empty string or sta
rt with a '/' and do not end with a '/'. The path [bill-live2] does not meet these criteria and has been changed to [/bill-live2]
31-Mar-2020 08:30:51.114 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.3
31-Mar-2020 08:30:51.114 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Jun 9 2016 11:16:29 UTC
31-Mar-2020 08:30:51.114 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         8.5.3.0
31-Mar-2020 08:30:51.114 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
31-Mar-2020 08:30:51.114 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            2.6.32-642.el6.x86_64
31-Mar-2020 08:30:51.114 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
31-Mar-2020 08:30:51.114 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /home/java8/jre
31-Mar-2020 08:30:51.114 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           1.8.0_101-b13
31-Mar-2020 08:30:51.115 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
31-Mar-2020 08:30:51.115 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /home/devopsvn.xyz/runtime
/huybk.com-live2
31-Mar-2020 08:30:51.115 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /home/devopsvn.xyz/runtime
/huybk.com-live2
31-Mar-2020 08:30:51.115 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.
file=/home/devopsvn.xyz/runtime/huybk.com-live2/conf/logging.properties
31-Mar-2020 08:30:51.115 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager
=org.apache.juli.ClassLoaderLogManager
31-Mar-2020 08:30:51.115 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySiz
e=2048
31-Mar-2020 08:30:51.115 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/home/congt
hanhtoan/runtime/huybk.com-live2
31-Mar-2020 08:30:51.115 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/home/congt
hanhtoan/runtime/huybk.com-live2
31-Mar-2020 08:30:51.116 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/home/cong
thanhtoan/runtime/huybk.com-live2/temp
31-Mar-2020 08:30:51.116 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library
which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/
lib64:/lib:/usr/lib
31-Mar-2020 08:30:51.235 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8587"]
31-Mar-2020 08:30:51.254 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/r
ead
31-Mar-2020 08:30:51.256 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 585 ms
31-Mar-2020 08:30:51.280 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service Catalina
31-Mar-2020 08:30:51.280 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.3
31-Mar-2020 08:30:51.280 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.3
31-Mar-2020 08:30:53.861 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
31-Mar-2020 08:31:27.681 INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [33,353] milliseconds.
31-Mar-2020 08:31:29.269 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [http-nio-8587]
31-Mar-2020 08:31:29.278 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 38021 ms

Như trên, chúng ta có thể thấy tomcat start mất 38s, một con số quá lớn. Nhìn lên phía trên sẽ có tiến trình SessionIdGeneratorBase khởi động mất 33s
Để khắc phục tốc độ khởi động của SessionIdGeneratorBase tiến hành làm như sau
Vào thư mục $JAVA_HOME/jre/lib/security/java.security
Thêm vào cuối file java.security
securerandom.source=file:/dev/urandom
Từ nay sẽ khắc phục được tốc độ khởi động của SessionIdGeneratorBase

Remove hoàn toàn selinux (centos)

Muốn tắt selinux có thể sửa /etc/selinux/config. hoặc setenfoce 0
Tuy nhiên đôi lúc cần xoá triệt để (vì lý do gì đó trời mới  biết) thì làm như sau

Hướng dẫn xoá hoàn toàn selinux trên centos

sudo yum remove selinux-policy*
sudo rm -rf /etc/selinux/targeted
sudo yum install -y selinux-policy-targeted selinux-policy-devel policycoreutils

Port forwarding với netsh (Windows)

Đôi khi, cần thực hiện portwarding 1 số máy trong LAN , với các hệ thống có firewall thì có thể làm điều này dễ dàng, tuy nhiên, đôi lúc giật gấu vá vai, đành phải tạm khắc phục nếu không có firewall. Ở bài trước, chúng ta đã làm điều này dễ dàng với iptables, nhưng iptables chỉ có trên linux. Với các đơn vị nhỏ nhỏ, đa phần là máy người dùng, windows, k lẽ đi cài 1 con linux lên thì về mặt chi phí ko còn khả thi nữa (tiền 1 con PC còn quá tiền mua con firewall phò). May thay, windows cũng làm được điều này với lệnh netsh, mở cmd dưới quyền administrator lên:

Cú pháp:

netsh interface portproxy add v4tov4 listenport=3621 listenaddress=192.168.1.151 connectport=1521 connectaddress=10.1.36.66

Giải thích: máy windows sẽ listen port 3621 , mọi traffic tới port 3621 sẽ điều hướng tới connectaddress=10.1.36.66 và connectport=1521

Để biết hiện tại máy đang proxy những gì:

netsh interface portproxy show all

 

Port forwarding với iptables


Đôi khi, cần thực hiện portwarding 1 số máy trong LAN với iptables, với các hệ thống có firewall thì có thể làm điều này dễ dàng, tuy nhiên, đôi lúc giật gấu vá vai, đành phải tạm khắc phục nếu không có firewall, iptables sẽ giúp chúng ta làm việc đó
Bước 1: kiểm tra 2 thông số sau của máy

cat /proc/sys/net/ipv4/conf/ppp0/forwarding 
cat /proc/sys/net/ipv4/conf/eth0/forwarding

ppp0 và eth0 là 2 interface ví dụ. nếu return về 1 là OK, nếu không thì thay đổi 2 thông số đó thành 1. cách làm có thể google

echo '1' | sudo tee /proc/sys/net/ipv4/conf/ppp0/forwarding
echo '1' | sudo tee /proc/sys/net/ipv4/conf/eth0/forwarding

Tiến hành mở port

iptables -A PREROUTING -t nat -p tcp --dport 55555 -j DNAT --to 192.168.9.14:3389
iptables -A FORWARD -p tcp -d 192.168.9.14 --dport 3389 -j ACCEPT

Giải thích:

Dòng 1: iptables publish 5555 ra bên ngoài, mọi traffic tới port 55555 được điều hướng tới 192.168.9.14:3389
Dòng 2: Allow truy cập tới 192.168.9.14 3389