Проблема, с которой вы сталкиваетесь, может иметь несколько причин, связанных с окружением, в котором запускается cron. Когда скрипт выполняется вручную, он использует ваше пользовательское окружение, где доступны все необходимые переменные окружения и команды. Когда этот же скрипт выполняется через cron, он работает в более ограниченной среде, которая может не содержать определённых переменных или путей.
Вот несколько советов по устранению проблемы:
1. **Путь к `yc`**: Убедитесь, что скрипт может найти команду `yc`. Запустите `which yc` в терминале для проверки полного пути к команде `yc`, например, `/usr/bin/yc`. Добавьте в скрипт явное указание пути:
```bash
IAM_TOKEN=$(/usr/bin/yc iam create-token)
```
2. **Переменные окружения**: Проверьте переменные окружения, которые могут отсутствовать в cron. Например, если `yc` требует определенных переменных окружения для работы, добавьте их в начало вашего скрипта. Например:
```bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
```
3. **Логирование ошибок**: Чтобы лучше понимать, что происходит, вы можете временно изменить перенаправление вывода в crontab:
```bash
*/5 * * * * /my_scripts/asr_token.sh > /my_scripts/cron.log 2>&1
```
Это позволит вам увидеть все сообщения об ошибках.
4. **Убедитесь, что `asr_token.txt` записывается правильно**: Используйте более длинное имя для файла или временный файл, чтобы убедиться, что вы записываете данные корректно:
```bash
echo -n "$IAM_TOKEN" > /my_scripts/asr_token_temp.txt && mv /my_scripts/asr_token_temp.txt $FILE
```
5. **Проблемы с правами**: Убедитесь, что у пользователя, от имени которого выполняется cron (в вашем случае это root), есть права на запись в `/my_scripts/asr_token.txt`.
Вот пример исправленного варианта вашего скрипта:
```bash
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
FILE='/my_scripts/asr_token.txt'
IAM_TOKEN=$(/usr/bin/yc iam create-token) # Уточните путь к yc
echo "Token: $IAM_TOKEN" # Сделайте вывод в лог, если нужно
echo -n "$IAM_TOKEN" > "$FILE"
```
После внесения изменений, попробуйте снова запустить скрипт через cron и проверьте лог-файл на вывод ошибок.