关机前执行脚本的日志顺序?

关机前执行脚本的日志顺序?
cat  /home/upload.sh  
/usr/bin/scp -P 22   /home/material.gz   root@remote_ip:/home
date  >>  /var/log/upload.log

upload.service 的设置

cat  /etc/systemd/system/upload.service
[Unit]
Description=upload files into my vps 
Before=shutdown.target  reboot.target
Requires=network-online.target
After=network.target 

[Service]
ExecStart=/bin/true
ExecStop=/bin/bash /home/upload.sh  

[Install]
WantedBy=multi-user.target

该脚本可以在关机之前将文件上传到我的 vps 中。

奇怪的是上传服务的日志。

journal -u upload 
Apr 23 12:54:50 localhost systemd[1]: Stopping upload files into my vps...
Apr 23 12:55:13 localhost systemd[1]: Stopped upload files into my vps.
Apr 23 12:55:19 localhost systemd[1]: Started upload files into my vps.
Apr 23 12:55:19 localhost systemd[1]: Starting upload files into my vps...

为什么它不像下面这样顺序呢?

Apr 23 12:54:50 localhost systemd[1]: Stopping upload files into my vps...
Apr 23 12:55:13 localhost systemd[1]: Stopped upload files into my vps.
Apr 23 12:55:19 localhost systemd[1]: Starting upload files into my vps...
Apr 23 12:55:19 localhost systemd[1]: Started upload files into my vps.

只有最后两行不同,为什么
会出现这样的日志信息?

按照George Udosen说的做:在服务文件中尝试这个[Unit] Requires=network-online.target After=network.target network-online.target。

我的设置

根本没用。

按照 George Udosen 的说法修改设置后进行记录

lshw -C  cpu
  *-cpu                     
       product: Intel(R) Xeon(R) CPU E3-1275 v5 @ 3.60GHz
       vendor: Intel Corp.
       vendor_id: GenuineIntel
       physical id: 1
       bus info: cpu@0
       width: 64 bits
       capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp x86-64 constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf cpuid_faulting pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch ida arat epb pln pts dtherm hwp hwp_noitfy hwp_act_window hwp_epp invpcid_single tpr_shadow vnmi flexpriority ept vpid fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx xsaveopt xsavec xgetbv1 xsaves

答案1

根据目前可用的信息,我假设您拥有多核或至少多线程 CPU,并且调度和问题解耦允许无序执行,从而导致日志输出中出现这种无序异常。我将使用它numactl来启动您的脚本。以下是一个例子:

numactl --physcpubind=0 /path/to/your/script

或者在这个具体案例中

numactl --physcpubind=0 /home/upload.sh

这将在分配给您的芯片组(索引 0)的第一个核心/CPU 上运行您的进程,如所列,/proc/cpuinfo这将强制脚本最多同时运行一个线程,但这并不意味着整个进程只由一个线程组成。如果程序被编写为生成一个新线程,它会这样做,但它将在与进程的其余部分相同的核心/CPU/线程上执行。

编辑:请注意,将处理限制到单个线程/核心/CPU 可能会导致当前任务的处理速度变慢。

资料来源:

https://superuser.com/questions/692138/how-to-force-a-process-to-run-on-a-single-thread-only-with-numactl

man numactl

https://en.wikipedia.org/wiki/Out-of-order_execution

https://en.wikipedia.org/wiki/Multithreading_(computer_architecture)

相关内容