2011-01-10 4 views
0

У меня недавно возникла проблема, когда чье-то задание cron вызывало скрипт, который отправил мне предупреждение, когда он был запущен. Я хотел узнать, на чью работу он работал и на каком сервере он работал.Узнайте, кто/что вызывает скрипт (cron)

Проблема была решена кем-то другим, но мне было интересно, что я мог бы сделать, чтобы узнать, какой хост/имя пользователя запускается в работе. Единственное, что я мог подумать, это изменить скрипт (Perl) и использовать Sys :: Hostname. Что-нибудь еще?

Спасибо!

+3

У вас есть электронная почта, проверить заголовки сообщений электронной почты – ajreal

+0

@ajreal, он не сказал, оповещение было поставлено Эл. адрес. – cjm

+0

мой плохой, изначально я имел в виду, если оповещение по электронной почте – ajreal

ответ

1

Нет автоматического способа сделать это, если вы не используете почту для отправки уведомлений. Письма содержат имя хоста в заголовке, поэтому вы можете хотя бы увидеть, откуда он (пользователь и хост). Затем отметка времени должна помочь найти задание cron.

Для всех других форм оповещений (SMS, пейджер и т. Д.) Вы должны сделать его политикой для включения имени пользователя и имени хоста в сообщение.

2

Как вы сказали, вы можете получить имя хоста с помощью Sys::Hostname. Вы также можете получить имя пользователя с getpwuid($<):

use Sys::Hostname; 

my $info = getpwuid($<) . '@' . hostname; 

print "$info\n"; # prints [email protected] 
1

Вы также можете добавить в скрипт: print `env|sort`; - что бы раскрыть USERNAME или LOGNAME. Если вы не хотите возиться с выходом вашей программы, войти в файл:

use POSIX 'strftime'; 
open my $log, '>>', 'logfile' or die "can't append to logfile: $!\n"; 
print $log strftime(%Y-%m-%d %T", localtime), " - starting $0\n"; 
print $log `env|sort`; 
close $log; 
Смежные вопросы