오늘까지 완벽하게 작동하는이 스크립트를 사용했습니다.데이터베이스에서 사용자를 생성하면 임의의 결과가 나타납니다
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 (존재하지 않는)
그리고 곧. 이 무작위적인 행동은 전에는 발생하지 않았습니다. 또한 모든 다른 스크립트를 중단하여 간섭이 없는지 확인했습니다. 여기에서만 발생합니다. 나는 결과의 무작위성 때문에 우둔한 것이다. 어떤 도움을 주시면 감사하겠습니다.
편집 : 스크립트를 재설정 한 후 다시 작동합니다.
먼저 SQL에 대한 자리 표시자를 사용하고 루프 외부에서 '준비'를 이동하십시오. 또한'@ chars'를 루프 내부에 어휘로 만들 필요가 없습니다. 결코 바뀌지 않습니다. 그런 다음'system' 호출을'print'로 대체하여 현재 진행중인 작업을 확인하십시오. – simbabque
@simbabque :'@ chars'는 루프 외부로 갈 수 있지만'$ len'이 아닙니다. – Borodin
@ 보 로딘 예, 잠시 잊어 버렸습니다. 그러나 그것은'$ hash = $ chars [rand @chars] for 1 .. $ len'로 재 작성 될 수 있습니다. – simbabque