Похоже, вы нашли ошибку в ksh93.
Я могу воспроизвести это (ksh93u +) с помощью:
$ x= ksh -c '[[ 0*1 -eq 5 ]]'
ksh: *1: arithmetic syntax error
Но все в порядке с:
ksh -c '[[ " 0*1" -eq 5 ]]'
. И похоже, что это было исправлено в ksh93v-
(beta), так как я не могу воспроизвести это там.
В любом случае, я бы использовал:
if ((f_count * sleep_interval % alarm_interval == 0 && f_count > 0)); then
Несколько примечаний:
[[...]]
, >
для сравнения строк (где 10
меньше 2 и в зависимости от языкового стандарта -1
может быть больше 0). Используйте -gt
для численного сравнения (хотя лучше использовать ((...))
). избегайте расширения переменных внутри арифметических выражений, например, используйте x
вместо $ x
. Например, сравните:
$ x = -1 ksh -c '((- $ x> 0))'
ksh: --1> 0: для присвоения требуется lvalue
с
$ x = -1 ksh -c '((-x> 0))'
$
Или:
$ x = 1 + 1 ksh - c 'echo "$ (($ x * 2)) $ ((x * 2))"'
3 4
Первая возможность заключается в том, что установлен неизменяемый флаг. Вы можете изменить это поведение с помощью команды chattr -i filename
, чтобы разрешить внесение изменений в файл.
Но, возможно вы используете файловую систему с ошибками; это может сделать вашу файловую систему доступной только для чтения полностью или для определенных файлов. Проблемы с оперативной памятью тоже могут эмулировать эту проблему. Это можно исправить, перезагрузив сервер и запустив fsck, но иногда сервер может не запускаться и данные могут быть потеряны, когда операция перезагрузки пытается синхронизировать информацию в вашей оперативной памяти с диском во время перезапуска. Если dmesg показывает, что вы работаете с ошибками памяти или файловой системы, я бы рекомендовал сделать резервную копию данных перед перезагрузкой, если это возможно. Иногда ядро выдает неверные адреса памяти из-за проблем с оборудованием, и некоторые неверные данные могут попасть на диски при перезагрузке системы. Сумасшедшее ядро хуже, чем ядро в панике, и может вести себя неожиданно, например, записывать в MBR или важные файлы; это редко, но возможно на плохом оборудовании, особенно если вы работаете с плохой оперативной памятью или горячим процессором. В Бразилии у нас есть большое количество неисправного оборудования, которое может привести к этому. Примечание: Если проблема связана с оперативной памятью, не запускайте FSCK — это приведет к безумию.
ОБНОВЛЕНИЕ: Поскольку вы говорите, что у вас проблемы только с tmp, есть вероятность, что tmp монтируется в другой раздел (возможно, с ошибками?) или извне (samba, nfs?), так что в этом случае нам нужна дополнительная информация о ваших смонтированных разделах. Если это так, опубликуйте результат вашей команды mount
без каких-либо аргументов.
Вероятно, у вас установлен неизменяемый флаг.
https://en.wikipedia.org/wiki/Chattr#In_Linux_systems_.28chattr_and_lsattr.29