Как проверить синтаксис в задании cron [закрыто]

Dado que conky generalmente está diseñado para usar lua, puede haber una solución más limpia que involucre ese lenguaje, pero aquí hay un script de preprocesamiento -rápido escrito en perl. Espera un archivo de configuración simple y extrae de la parte conky.config={...}las variables que se están configurando. Por ejemplo, minimum_width = 230,creará una variable perl con el mismo nombre y la establecerá en ese valor.

Luego pasa por la parte conky.text=[[...]]y busca expresiones dentro de @...@. Esto supone que no usa el carácter @para nada más. Luego evalúa la expresión de perl que ha puesto dentro. Perl también usa $delante de variables simples, por lo que puede usar expresiones como @$minimum_width/5@y será reemplazada por 230/5, es decir, 46.

#!/usr/bin/perl
# https://unix.stackexchange.com/a/445140/119298
# parse conky 1.10 vars in conky.config and eval @expression@ in.text part
use strict;
use Safe;
my $pack = new Safe();
sub replace{
    my ($a,$body,$c) = @_;
#    $body =~ s/@(.*?)@/eval($1)/gse;
    $body =~ s/@(.+?)@/$pack->reval($1)/gse; # evaluate @expression@ using vars
    return $a.$body.$c;
}
my $config = join('',<>);
if($config =~ m/conky\.config\s*=\s*\{(.*?)\}/s){
    my $vars = "$1,";
    while($vars =~ m/\s*([a-z0-9_]+)\s*=\s*(.+?)\s*,/gs){
        ${$pack->varglob($1)} = $2;
    }
}
$config =~ s/(conky\.text\s*=\s*\[\[)(.*?)(\]\])/replace($1,$2,$3)/se;
print $config;

Coloque este script en un archivo, digamos conkyparse, y hágalo ejecutable con chmod +x conkyparse. Mueva su archivo ~/.conkyrcpara decir, preconkyy edítelo como se indicó anteriormente, luego, antes de ejecutar conky, ejecute conkyparse <preconky >~/.conkyrcpara calcular y reemplazar las expresiones.


Tenga en cuenta que también puede inventar y utilizar sus propios nombres de variables. Para evitar un error conky, debe ocultar su definición dentro de un comentario (una línea que comienza--). Aquí hay un ejemplo preconkyarchivo:

conky.config = {
    minimum_width = 230,
 -- myvar = 22,
}
conky.text = [[
  ${goto @3*$myvar@} ${cpugraph 14,@$minimum_width/2@ e19e19 ffffff}
]]

y el archivo de salida resultante

conky.config = {
    minimum_width = 230,
 -- myvar = 22,
}
conky.text = [[
  ${goto 66} ${cpugraph 14,115 e19e19 ffffff}
]]
3
29.08.2018, 18:41
1 ответ

Вот начало написанного на awk валидатора, который проверяет:

  • для строк без комментариев -
  • для строк с достаточным количеством полей, чтобы они выглядели как запись crontab
  • , где значение дня -месяца -в $3 не равно 1 или*
  • где значение месяца не*

... затем напечатайте (оскорбительную строку ).

На примере ввода:

53 23 * * * root /usr/lib64/sa/sa2 -A
53 23 1 * * root /usr/lib64/sa/sa2 -A
53 23 2 * * root /usr/lib64/sa/sa2 -A

Вывод:

53 23 2 * * root /usr/lib64/sa/sa2 -A

Это должно быть улучшено для обработки названий месяцев и диапазонов (или даже @monthly), как позволяет синтаксис cron.

awk '!/^#/ && NF >= 7 && ($3 != 1 && $3 != "*") && $4 != "*" 1'
2
27.01.2020, 21:29

Теги

Похожие вопросы