My sketch doesn't seem to start if the serial monitor is not open

This is exactly as it seems, I have sufficient power, i'm running windows. I have no errors when uploading the sketch works perfectly when the usb cable is connected but for some reason when the cable isn't connected it wont run. What have I done wrong? I have a 10k resistor from RX to the GND pin and I've looked everywhere. I'm using an Arduino Leonardo with a WiFi shield. All I need to do is plug it into my computer and open the serial monitor it works. WTH?

#include <Thread.h>
#include <SPI.h>
#include <WiFi.h>
#include <WiFiUdp.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN      6
#define NUMPIXELS      30

// Time Gatherer data
char ssid[] = "RexNetLocal";  //  your network SSID (name)
char pass[] = "8602055300";       // your network password
unsigned int localPort = 2390;      // local port to listen for UDP packets
int keyIndex = 0; 

int status = WL_IDLE_STATUS;
IPAddress timeServer(129, 6, 15, 28); // time.nist.gov NTP server
const int NTP_PACKET_SIZE = 48;
byte packetBuffer[ NTP_PACKET_SIZE];
WiFiUDP Udp; //Udp for pulling data

int hour;
int minute;
int second;

//Pixel Control Thread Data
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
Thread pixelControlThread = Thread();

//Pixel Mainthread Method
void pixelCallback(){
  Serial.print("\nPixel Callback Method Called at : ");
  Serial.print(hour);
  Serial.print(':');
  Serial.print(minute);
  Serial.print(':');
  Serial.println(second);

  int brightness;
  int sunrise = 4;
  int sunset = 22;
  if(hour == sunrise - 1){
    brightness = (255.0*(minute/120.0));
  } else if(hour == sunrise){
    brightness = (255.0*((minute+60.0)/120.0));
  } else if(hour == sunset - 1){
    brightness = (255.0 - (255.0*(minute/120.0)));
  } else if(hour == sunset){
    Serial.println("sunset");
    brightness = (255.0 - (255.0*((minute+60.0)/120.0)));
  } else if (hour > sunset || hour < sunrise){
    brightness = 0.0;
  } else if (hour < sunset){
    brightness = 255.0;
  } else {
    Serial.print("ERROR");
    brightness = 255;
  }
  
  Serial.print("Brightness set to: ");
  Serial.println(brightness);
  
  for(int i=0;i<30;i++){
    pixels.setPixelColor(i, pixels.Color(brightness,brightness,0)); // Yellow color that shifts with the daytime.
  }
  pixels.show(); // This sends the updated pixel color to the hardware.
}


void setup(){
  pixels.begin(); // This initializes the NeoPixel library.
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while (true);
  }

  // attempt to connect to Wifi network:
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    
    status = WiFi.begin(ssid, pass); 
    delay(15000);
  }

  Serial.println("\nConnected to WiFi");
  printWifiStatus();
  Serial.println("\nStarting connection to server...");
  Udp.begin(localPort);

  pixelControlThread.onRun(pixelCallback);
  pixelControlThread.setInterval(500);
}

void loop(){
  sendNTPpacket(timeServer); // send an NTP packet to a time server
  // wait to see if a reply is available
  while(!Udp.parsePacket()){
    sendNTPpacket(timeServer); // send an NTP packet to a time server
    delay(1000);
  }
  if (Udp.parsePacket()) {
    Udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer

    //the timestamp starts at byte 40 of the received packet and is four bytes,
    // or two words, long. First, esxtract the two words:

    unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
    unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
    
    unsigned long secsSince1900 = highWord << 16 | lowWord;
    const unsigned long seventyYears = 2208988800UL;
    unsigned long epoch = secsSince1900 - (60*60*4) - seventyYears;


    Serial.print("\nThe EST time is ");       // UTC is the time at Greenwich Meridian (GMT)
    Serial.print(((epoch  % 86400L) / 3600)); // print the hour (86400 equals secs per day)
    hour = (((epoch  % 86400L) / 3600));
    Serial.print(':');
    if (((epoch % 3600) / 60) < 10) {
      // In the first 10 minutes of each hour, we'll want a leading '0'
      Serial.print('0');
    }
    Serial.print((epoch  % 3600) / 60); // print the minute (3600 equals secs per minute)
    minute = ((epoch  % 3600) / 60);
    Serial.print(':');
    if ((epoch % 60) < 10) {
      // In the first 10 seconds of each minute, we'll want a leading '0'
      Serial.print('0');
    }
    Serial.println(epoch % 60); // print the second
    second = (epoch % 60);
  }
  if(pixelControlThread.shouldRun())
  pixelControlThread.run();
  // wait ten seconds before asking for the time again
  delay(10000);
}

// send an NTP request to the time server at the given address
unsigned long sendNTPpacket(IPAddress& address) {
  //Serial.println("1");
  // set all bytes in the buffer to 0
  memset(packetBuffer, 0, NTP_PACKET_SIZE);
  // Initialize values needed to form NTP request
  // (see URL above for details on the packets)
  //Serial.println("2");
  packetBuffer[0] = 0b11100011;   // LI, Version, Mode
  packetBuffer[1] = 0;     // Stratum, or type of clock
  packetBuffer[2] = 6;     // Polling Interval
  packetBuffer[3] = 0xEC;  // Peer Clock Precision
  // 8 bytes of zero for Root Delay & Root Dispersion
  packetBuffer[12]  = 49;
  packetBuffer[13]  = 0x4E;
  packetBuffer[14]  = 49;
  packetBuffer[15]  = 52;

  //Serial.println("3");

  // all NTP fields have been given values, now
  // you can send a packet requesting a timestamp:
  Udp.beginPacket(address, 123); //NTP requests are to port 123
  //Serial.println("4");
  Udp.write(packetBuffer, NTP_PACKET_SIZE);
  //Serial.println("5");
  Udp.endPacket();
  //Serial.println("6");
}

void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("\nSSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

rex_dorchester:
the sketch works perfectly when the usb cable is connected but for some reason when the cable isn't connected it wont run.

So what's providing the power when the USB cable is disconnected?

  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

Comment this out and see what happens.