Схождение с ума с выполняющимся сценарием Python через crontab на debian!

В вашем коде много ошибок:).

Прежде всего 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 может читать больше байтов, чем ожидалось. В вашем случае все должно быть в порядке, потому что вы используете их для разных целей.

5
задан demongolem 23 June 2011 в 20:19
поделиться

7 ответов

Существует два способа создать 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, на самом деле под управлением.

4
ответ дан 14 December 2019 в 13:47
поделиться

Вы попытались еще поместить сценарий где-нибудь (например,/usr/local/bin/)?

0
ответ дан 14 December 2019 в 13:47
поделиться

Обновленный...

Замените содержание

* * * * * date >> /tmp/foo 

Это связывает справку?

Удалите файл, который это, как предполагается, создает. Это возвращается? Я думал, что у каждого пользователя был свой собственный crontab файл, таким образом, пользователь на строке является suspsect.
Кто-то подшучивал над Вами и заменял двоичный файл Python никаким op?

Я должен думать, что крон не работает правильно, так как эхо не работает. Вы удостоверялись, что изменили выходной каталог на/tmp с эхом?

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

1
ответ дан 14 December 2019 в 13:47
поделиться

Это хорошо работает для меня на моем поле RHES 4 Linux точно как показано (ПРИМЕЧАНИЕ: Я удалил 'корневое' имя пользователя в crontab).

Я подозреваю, что существует что-то не так со способом, которым Вы устанавливаете свое задание крона или конфигурацию крона в Вашей системе. Как Вы устанавливаете это? Вы используете crontab -e или некоторый другой метод? Могут Вы для выполнения каких-либо других заданий крона для корня успешно?

0
ответ дан 14 December 2019 в 13:47
поделиться

Это могло бы быть из-за задания, объявленного, ранее перестав работать из-за синтаксической ошибки. Можно ли вставить весь crontab? Ваша строка выглядит хорошей насколько я вижу.

0
ответ дан 14 December 2019 в 13:47
поделиться

crontab запись корректна при редактировании/etc/crontab - однако при использовании crontab обычного пользователя (т.е. crontab-e, crontab crontabfle, и т.д.), корневая запись является синтаксически неправильной.

0
ответ дан 14 December 2019 в 13:47
поделиться

Попытка, просто отправляющая stdout к файлу журнала, и вместо stderr и вместо крепкий:
/usr/bin/python/root/test.py> /root/classwatch.log

0
ответ дан 14 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

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