Запущение скрипта Python через крон с sudo?

pkill и pgrep, конечно, существуют в Cygwin в procps пакете (можно искать cygwin пакеты здесь).

Это, кажется, работает на меня,

tony:~$ nohup sleep 100983 &
[1] 5476
tony:~$ nohup: ignoring input and appending output to `nohup.out'
tony:~$
tony:~$ ps -ef | grep sleep
    tony    5476    2696   2  23:28:53 /usr/bin/sleep
tony:~$ pkill -f sleep
[1]+  Terminated              nohup sleep 100983
tony:~$

и

tony:~$ nohup sleep 837746 &
[1] 228
tony:~$ nohup: ignoring input and appending output to `nohup.out'
tony:~$ pgrep -f 837746
228
tony:~$ pkill -f 837746
[1]+  Terminated              nohup sleep 837746
tony:~$

Обновление: хорошо, протестированный с Java. Выполнение Java из командной строки Cygwin не приводит к строке Java, помещаемой в /proc//cmdline, это просто содержит -bash. Это, кажется, ограничение Cygwin.

tony:~$ java -Dsomething=valid -jar Captor.jar &
[1] 2700
tony:~$ ps -ef
     UID     PID    PPID TTY     STIME COMMAND
    tony    4164       1   ?    Aug 21 /usr/bin/mintty
    tony    4676    4164   0    Aug 21 /usr/bin/bash
    tony    5776    4676   0    Aug 23 /usr/bin/ssh
    tony    5148       1   ?  23:53:03 /usr/bin/mintty
    tony    5332    5148   1  23:53:03 /usr/bin/bash
    tony    5816       1   ?  00:04:16 /usr/bin/mintty
    tony    5432    5816   2  00:04:16 /usr/bin/bash
    tony    2700    5432   2  00:04:34 /cygdrive/c/Windows/system32/java
    tony    2232    5432   2  00:04:39 /usr/bin/ps
tony:~$ pgrep -f something
tony:~$ cat /proc/2700/cmdline
-bash
tony:~$
tony:~$ cat /proc/2700/exename
/cygdrive/c/Windows/system32/java

Я подозреваю поэтому, ответ - Вы, не может сделать этого с инструментом Cygwin, Вам был бы нужен Windows определенный инструмент.

0
16.11.2011, 11:35
2 ответа

Почему Вы не добавляете cronjob к crontab типичного пользователя?

...

Если это должно войти в администраторский crontab пользователя, и необходимо выполнить его с sudo для него для выполнения правильно, то Вы одно решение могли бы быть должны изменить свой sudoers файл, чтобы позволить администраторскому пользователю запускать скрипт Python без пароля.

admin hostname = NOPASSWD: /path/to/python/script.py

Затем в admin crontab файл пользователя:

0 0 * * * sudo /path/to/python/script.py > /tmp/script.py.log 2>&1

Запускать скрипт в полночь и вывод журнала к /tmp/script.py.log (таким образом, Вы видите, где/если ошибки происходят).

Это предполагает что Ваше использование admin пользователь указывает, что у Вас есть некорневой пользователь с именем пользователя admin. Иначе, по умолчанию, root пользователю разрешают выполнить команды sudo без аутентификации.

2
28.01.2020, 02:29
  • 1
    Почему бы не использовать crontab обычного пользователя: потому что затем обычный пользователь мог удалить или уничтожить задание. Я думаю, что Steve имеет в виду корень администратором; проблема состоит в том, что сценарий Python пытается связаться с некоторым сервером уведомления, работающим как обычный пользователь. Бойкий –  Gilles 'SO- stop being evil' 16.11.2011, 02:54
  • 2
    благодарит @Gilles. это имеет смысл. я предполагаю, что думаю о вещах с точки зрения "сервера", где мы обычно не используем вещи как notifyd. :) –  Tim Kennedy 16.11.2011, 04:24
  • 3
    @Gilles да, это корректно, я не хочу, чтобы пользователь смог уничтожить его, пользователь, которого я называю, поскольку администратор является 1-м пользователем, я устанавливаю на монетном дворе, я думаю, что монетный двор следует за той же политикой как человечность, первый пользователь является членом группы admin, и группа admin имеет все права –  squareborg 16.11.2011, 12:34

Можно просто добавить его к crontab корня: sudo crontab -e

Это будет работать как корень в указанном расписании. Посмотрите man 5 crontab для crontab формата файла.

Править

DISPLAY=:0
*/5 * * * * /path/to/your/script
1
28.01.2020, 02:29
  • 1
    Привет спасибо, но сценарий работает, но он дисплей привычки диалоговое окно я предполагаю его получение бойкого того же. GError: Невозможно подключиться к ошибкой –  squareborg 15.11.2011, 18:15
  • 2
    сервера это приложение X Приложений (с GUI)? В этом случае необходимо установить переменную ДИСПЛЕЯ для экспорта:0 в crontab. –  Matteo 15.11.2011, 18:25
  • 3
    @Matteo является частью Gnome, который не требует X (главным образом структуры данных и коммуникационные средства). Я думаю, что это ищет notifyd, не для X-сервера. –  Gilles 'SO- stop being evil' 16.11.2011, 02:56
  • 4
    @Gilles и mateo, да, который это действительно имеет gui часть к нему, для показа уведомления и диалогового окна, крон, нужно что-то еще экспортирующее в рычаг в текущую пользовательскую сессию? Я попробовал ДИСПЛЕЙ =:0 в корнях crontab, то же самое происходит бойкая ошибка –  squareborg 16.11.2011, 11:37

Теги

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