2017-03-13 5 views
0

오늘까지 완벽하게 작동하는이 스크립트를 사용했습니다.데이터베이스에서 사용자를 생성하면 임의의 결과가 나타납니다

Linux 사용자 생성을 자동화하려고합니다. 나는 이것을 좋아한다 :

my $sql = 'SELECT id FROM users WHERE updated = 0'; 
my $sth = $dbh->prepare($sql); 
$sth->execute(); 
# 

while (my @row = $sth->fetchrow_array) { 

    #print $row[0],"\n"; 

    my @chars = ('0' .. '9', 'A' .. 'F'); 
    my $len = 12; 
    my $hash; 

    while ($len--) { 
     $hash .= $chars[ rand @chars ] 
    } 

    system("/usr/sbin/useradd -g mygroup -d /home/newusers/$hash -s /sbin/nologin $hash"); 
    system("echo $hash:$hash | /usr/sbin/chpasswd"); 

    my $sql_hash_update = 
      "UPDATE users SET hash = '" 
      . $hash 
      . "', updated = 1 WHERE id = '" 
      . $row[0] 
      . "'"; 

    my $sth_hash_update = $dbh->prepare($sql_hash_update); 

    $sth_hash_update->execute(); 
} 

이것은 일주일 동안 완벽하게 작동했다. crontab에서 매분 1 회 실행됩니다.

이제 디렉토리를 덮어 쓰고 임의의 숫자로 소유자를 추가합니다.

폴더가 생성 AEB7F3BDED52은 (존재) :/홈/AEB7F3BDED52 폴더의

소유자 : 652,350,688,667은 (하지 않는

예 :

한 번 실행 된 :

사용자가 생성 실제로 사용자로 존재)

두 번 실행 된 :

사용자 생성 : AD1B583F6062은 (존재)

폴더 생성 :/홈/AD1B583F6062 폴더의

소유자 : 1013 (존재하지 않는)

그리고 곧. 이 무작위적인 행동은 전에는 발생하지 않았습니다. 또한 모든 다른 스크립트를 중단하여 간섭이 없는지 확인했습니다. 여기에서만 발생합니다. 나는 결과의 무작위성 때문에 우둔한 것이다. 어떤 도움을 주시면 감사하겠습니다.

편집 : 스크립트를 재설정 한 후 다시 작동합니다.

+0

먼저 SQL에 대한 자리 표시자를 사용하고 루프 외부에서 '준비'를 이동하십시오. 또한'@ chars'를 루프 내부에 어휘로 만들 필요가 없습니다. 결코 바뀌지 않습니다. 그런 다음'system' 호출을'print'로 대체하여 현재 진행중인 작업을 확인하십시오. – simbabque

+2

@simbabque :'@ chars'는 루프 외부로 갈 수 있지만'$ len'이 아닙니다. – Borodin

+0

@ 보 로딘 예, 잠시 잊어 버렸습니다. 그러나 그것은'$ hash = $ chars [rand @chars] for 1 .. $ len'로 재 작성 될 수 있습니다. – simbabque

답변

0

서버를 재설정하면이 문제가 해결되므로이 문제는 Linux가 아니라 코드와 관련이 있다고 가정합니다.

관련 문제