A tarefa agendada do Windows falha ao concluir com o código de erro 0xc000013a

11

Estou usando o Windows Server 2003 e tenho uma tarefa agendada que falha ao concluir. A tarefa está definida para executar um Script de Comando do Windows (.cmd) às 15h todos os dias. O script executa um programa que extrai alguns dados de um banco de dados do SQL Server e carrega esses dados em um servidor FTP.

O código de erro exibido na coluna "Último resultado" da pasta de tarefas agendadas é 0xc000013a. Uma rápida pesquisa no Google leva a esta página de suporte da Microsoft que declara: O código de erro "C" mais comum é "0xC000013A: O aplicativo foi encerrado como resultado de um CTRL + C".

Ninguém está logado no momento em que a tarefa é executada; portanto, não há ninguém por perto para pressionar CTRL + C. Não sei se entendi o que está sendo dito aqui na documentação da Microsoft.

Eu verifiquei as coisas rudimentares - a tarefa agendada está ativada, agendada para ser executada todos os dias e apontando para um arquivo que existe em um local válido. Curiosamente, quando eu executo essa tarefa manualmente (executando o script .cmd na linha de comando ou clicando com o botão direito do mouse na tarefa e clicando em "Executar"), a tarefa é concluída com êxito.

O que esse código de erro significa e como posso executar esta tarefa quando não estou lá para forçá-la?

Brian Willis
fonte
Tente adicionar um código de saída ao script final sozinho (por exemplo exit 0). Se ainda falhar, está falhando por si só. Caso contrário, era apenas um código de saída falso, mal interpretado pelo agendador de tarefas.
bjoster

Respostas:

6

Solucionando problemas de scripts agendados:

  1. Se você ainda não o fez, verifique o arquivo de log de Tarefas agendadas , na GUI em Avançado > Exibir log . Pesquise no arquivo " ***" para encontrar as entradas mais recentes e você poderá ver algumas informações adicionais sobre erros.

  2. Defina um arquivo de log para capturar a saída e envie erro e saída padrão. Altere qualquer eco OFF para echo ON para garantir que você não esteja suprimindo nenhuma mensagem de erro.
    Por exemplo, se seu script for chamado ftp.data.cmd, sua tarefa agendada poderá ser assim,

    cmd /c ftp.data.cmd >> ftp.data.log 2>&1

  3. O script está suspenso? Talvez o agendador de tarefas esteja matando o script (daí o código de erro CTRL + C) após um período especificado. Adicione alguns deles em pontos estratégicos do seu scipt,

    echo %DATE% %TIME%

  4. Tem certeza de que a conta que está executando o script tem permissões / acesso a tudo no script?

  5. Se você não tiver alegria, execute este comando e poste a saída aqui, talvez possamos começar com o agendamento,

    schtasks /query /v /fo LIST /s YOURSERVER

nray
fonte
4

Não consigo responder à pergunta diretamente, pois não sei especificamente o que significa a mensagem de erro (nem, portanto, como corrigi-la), mas se estivesse tentando solucionar o problema, adicionaria algumas gravações a um arquivo de log em pontos estratégicos no script e, depois do horário agendado, veja qual é o último ponto de verificação a ser executado.

Minha suspeita seria que há algo que está falhando devido às credenciais sob as quais o script está sendo executado ou que algo no script precisa de um usuário conectado. Estreitar onde as coisas falham no script pode ajudar a encontrar o código "ofensivo".

cori
fonte
2

Sei que essa é uma postagem antiga, mas eles são muito úteis na busca de soluções e talvez o que eu encontrei também possa ser útil. Eu estava usando o WinSCP no Windows Server 2003 para carregar em um servidor ftp e recebi a mesma mensagem de erro e o arquivo SchedLgU.txt apontou para o tempo insuficiente na seção "Interrompa a tarefa se fornecer:", mesmo que eu tenha fornecido a tarefa muito tempo para fazer o upload.

Olhando no Gerenciador de Tarefas, pude ver que o WinSCP.exe não estava sendo limpo e eu tinha vários processos na lista, então criei um arquivo em lotes (taskkill / f / im winscp.exe) para matar qualquer processo aberto e eu faça com que esse arquivo em lotes seja executado antes do WinSCP e funcione bem agora.

susand
fonte
2

Encontrei isso hoje em um servidor remoto, e a solução foi alterar a configuração de execução de "Executar apenas quando o usuário estiver conectado" para "Executar se o usuário estiver conectado ou não".

Com "Executar apenas quando o usuário estiver conectado", a tarefa inicia uma janela de comando que foi fechada quando o tempo limite da minha sessão de área de trabalho remota expirou. Com "Executar se o usuário está logado ou não", nenhuma janela é exibida enquanto a tarefa é executada; portanto, a execução não para quando minha sessão da área de trabalho remota termina.

VolleyJosh
fonte
1

Semelhante à resposta da cori, recomendo que você verifique com quem a tarefa agendada está definida para execução, pois vi esse erro ocorrer quando a conta de usuário que está executando a tarefa não tem as mesmas permissões que o usuário conectado

Glenn Slaven
fonte
1

Se isso foi executado antes, talvez uma condição como uma interrupção na rede ou um problema em outro host possa explicar a falha.

Ted Taylor
fonte
1

Eu tive o mesmo erro e foi porque o arquivo em lotes que eu estava executando solicitava a exclusão de alguns arquivos com o comando DEL. Como não há usuário para responder S / N ao processo em lote, a tarefa agendada é encerrada. A seguinte é a mensagem que encontrei no meu log de tarefas agendadas: "a tarefa foi encerrada. Esta ação foi iniciada por um administrador ou pelo serviço Agendador de Tarefas (porque, por exemplo, o computador agora não está ocioso)". Minha recomendação é executar a tarefa manualmente no prompt de comando para ver onde está parando ou solicitando alguma interação do usuário, corrigi-la e sua tarefa será executada corretamente.

Ruddwall
fonte
1

Se você estiver tentando executar o programa sob o controle do Agendador de Tarefas, o System.Environment.CurrentDirectory retornará C: \ Windows \ System32, NÃO onde o seu executável está localizado. Este erro pode ser um erro de arquivo não encontrado; Eu estava tentando fazer logon em um subdiretório e ele não existia na árvore System32.

roadkill42
fonte
0

Nos meus scripts, isso é claro. Isso acontece porque eu tenho "pausa" no final do arquivo em lotes e a tarefa agendada é limitada a 20 minutos. Quando o usuário está presente, oi pode ver o fluxo do trabalho. Quando o arquivo em lote não é finalizado pela tarefa agendada, após 20 min. Isso está causando 0xc000013a e está ok.

Danko
fonte
0

Eu tive o mesmo problema e o corrigi, alterando o gatilho de "Na inicialização do sistema" para "No logon".

Andrei G
fonte
0

teve o mesmo problema .. corrigido jogando com o usuário registrado para executar a tarefa agendada. no final, mudar o domínio foi a resposta.

tal
fonte