Возможно, что python3 не в пути для пользователя, который запускает crontab. Таким образом, вы должны сделать свой сценарий более надежным.
Вы можете не использовать shell=True
и строковую командную строку: это плохая практика и приводит к проблемам (например, с цитированием, а также к проблемам безопасности)
Что-то, что будет работать независимо от того, какой системный путь будет использовать sys.executable
для поиска текущего интерпретатора и создания аргумента list , чтобы избежать будущих проблем, например, с аргументами, содержащими специальные символы:
subprocess.call([sys.executable,"/root/test2.py","1"])
sys.executable
- это полный путь к интерпретатору, на котором в данный момент выполняется скрипт, поэтому его обязательно найдут. Остальные аргументы не зависят от пользователя (кроме разрешений)
Также, возможно, проверьте код возврата subprocess.call
или, если вызов должен быть успешным, замените на subprocess.check_call
.
Другим способом было бы импортировать test2
и вызывать один, если его функции. Это не создает другой процесс, но это, вероятно, не имеет значения, и у него есть преимущества (например: позволяет возвращать python типов, не прерывая цепочку исключений…)