В вашем коде много ошибок:).
Прежде всего scanf
принимает в качестве 1-го аргумента указатель, поэтому, когда вы хотите использовать его для строки, сделайте:
char ip[10];
...
scanf("%s", ip);//THIS IS CORRECT
not scanf("%s", &ip);
.
На сервере компилятор жаловался на тип clilen
. accept
ожидает sockelen_t
(или эквивалентно unsigned int
), в то время как вы объявили эту переменную простой int
.
Это следующее. В клиенте вы сделали strcpy(buffer, name);
, который копирует name
, начиная с начала буфера, но начало буфера фактически содержало ваши данные. Вы должны сделать что-то вроде следующего, используя strcat
, как вы делали в следующей строке:
bzero(buffer, 255);
fgets(buffer, 255, stdin);
strcat(buffer, name);
strcat(buffer, ": ");
Также обратите внимание на другое: избегайте смешивания функций системного вызова read
write
getchar
с библиотечными функциями, такими как fread
, fwrite
, fgets
. У меня была эта проблема с тем, что вызвано тем фактом, что fgets
может читать больше байтов, чем ожидалось. В вашем случае все должно быть в порядке, потому что вы используете их для разных целей.
Существует два способа создать crontab - на пользователя или глобально. Для глобального crontab (/etc/crontab) Вы указывают пользователя, согласно:
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
Для пользователя crontabs Вы не делают, согласно:
aj@wherever:~$ crontab -l
0 * * * * /home/aj/bin/update-foobar
Получить сценарий Python, работающий через #! нотация, Вы просто делаете исполняемый файл сценария (chmod 755/root/test.py) и вызываете его непосредственно, что-то как:
/root/test.py
Если Вы не хотите делать это, можно выполнить его через межпретора Python вручную, как:
/usr/bin/python /root/test.py
Это принимает, какой бы ни у пользователя, которого Вы выполняете как (т.е. пользователь в/etc/crontab или пользователь Вы выполняете crontab-e как) есть разрешение видеть, что сценарий Python - / корень мог бы быть недоступен обычным пользователям, например.
Можно получить хорошую идею того, выполняется ли сценарий вообще путем добавления:
import time
time.sleep(20) # pause for 20 seconds
и затем сверяясь с "вершиной" или "PS aux" или "pstree", чтобы видеть, если Python, на самом деле под управлением.
Вы попытались еще поместить сценарий где-нибудь (например,/usr/local/bin/)?
Обновленный...
Замените содержание
* * * * * date >> /tmp/foo
Это связывает справку?
Удалите файл, который это, как предполагается, создает. Это возвращается? Я думал, что у каждого пользователя был свой собственный crontab файл, таким образом, пользователь на строке является suspsect.
Кто-то подшучивал над Вами и заменял двоичный файл Python никаким op?
Я должен думать, что крон не работает правильно, так как эхо не работает. Вы удостоверялись, что изменили выходной каталог на/tmp с эхом?
можно ли сделать передозировку (восьмеричный дамп) файла и видеть ли, помещаете ли, возможно, Вы управляющий символ или вкладку в файл крона?
Это хорошо работает для меня на моем поле RHES 4 Linux точно как показано (ПРИМЕЧАНИЕ: Я удалил 'корневое' имя пользователя в crontab).
Я подозреваю, что существует что-то не так со способом, которым Вы устанавливаете свое задание крона или конфигурацию крона в Вашей системе. Как Вы устанавливаете это? Вы используете crontab -e
или некоторый другой метод? Могут Вы для выполнения каких-либо других заданий крона для корня успешно?
Это могло бы быть из-за задания, объявленного, ранее перестав работать из-за синтаксической ошибки. Можно ли вставить весь crontab? Ваша строка выглядит хорошей насколько я вижу.
crontab запись корректна при редактировании/etc/crontab - однако при использовании crontab обычного пользователя (т.е. crontab-e, crontab crontabfle, и т.д.), корневая запись является синтаксически неправильной.
Попытка, просто отправляющая stdout к файлу журнала, и вместо stderr и вместо крепкий:
/usr/bin/python/root/test.py> /root/classwatch.log