I am new to bash and trying to write a script that disables kworker business as in aMaia's answer here.
So far, I have this, which I run from root:
1 #!/bin/bash
2
3 cd /sys/firmware/acpi/interrupts
4 for i in gpe[[:digit:]]* # Don't mess with gpe_all
5 do
6 num=`awk '{print $1}' $i`
7 if (( $num >= 1000 )); then # potential CPU hogs?
8 # Back it up and then disable it!!
9 cp $i /root/${i}.backup
10 echo "disable" > $i
11 fi
12 done
But running it results in:
./kkiller: line 10: echo: write error: Invalid argument
What is going on here? I thought $i
was just the file name, which seems like the correct syntax for echo.
Suggestions for cleaning up/improving the script in general are also appreciated!
Update: With set -vx
added to the top of the script, here is a problematic iteration:
+ for i in 'gpe[[:digit:]]*'
awk '{print $1}' $i
++ awk '{print $1}' gpe66
+ num=1024908
+ (( 1024908 >= 1000 ))
+ cp gpe66 /root/gpe66.backup
+ echo disable
./kkiller: line 10: echo: write error: Invalid argument
I had this problem too in Docker on Alpine linux environment. I think the problem is that echo by default put a newline character at the end of the string, and the kernel not accept it, but it is not the case in every system. In Docker I had this error, but the value was written despite the error message.
The solution (in Bash): echo -n disable >/sys/firmware/acpi/interrupts/gpe66
. This way no newline is echoed.
Double-check all spelling. echo "disabled" will emit a write error even for root whereas echo "disable" succeeds.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With